C#类看不到另一个类的静态方法

Posted

技术标签:

【中文标题】C#类看不到另一个类的静态方法【英文标题】:C# class can't see static method of another class 【发布时间】:2021-10-20 06:05:54 【问题描述】:

我的一个 Unity 项目遇到了一些可访问性问题。我创建了一个不继承自MonoBehaviour 的类。它有一个方法public static void LoadScene(string sceneName)

当我尝试从另一个类调用此方法时,出现语法错误。这是我第一个使用静态方法的脚本:

public class GameLoader

   public static void LoadScene(string sceneName)
   
       SceneManager.LoadSceneAsync(sceneName);
   

这是我的另一个脚本:

public class GameHandler : MonoBehaviour

   private void Start()
   
       GameLoader.LoadScene("MyScene");    //Syntax error
   

通常,我会知道问题可能出在哪里,但在这种情况下,GameHandlerGameLoader 识别为类,但在点 (GameLoader.) 之后,它找不到任何属性或完全发挥作用。当我尝试在点之后写任何东西时,我会遇到语法错误。

我做了一些实验,似乎我不会跨越另一个名为 GameLoader 的类,并且还添加了必要的命名空间。

我很迷茫,希望有人能帮帮我。

原码GameLoader:

using UnityEngine.SceneManagement;
using UnityEngine;

namespace MyGame

   namespace System
   
       public class GameLoader
       
           public static void LoadScene()
           

           
       
   

UIHandler

using UnityEngine;
using System;

namespace MyGame

   namespace System
   
       namespace UI
       
          public class UIHandlerMenu : MonoBehaviour
          
              GameLoader.LoadScene();
          
       
   

错误信息:

严重性代码描述项目文件行抑制状态 错误 IDE1007 当前上下文中不存在名称“GameLoader.LoadScene”。

LoadScene 本身也有同样的错误。

【问题讨论】:

如果您单击资产中的GameLoader 脚本一次,您是否在 Inspector 中看到了它的内容?还有其他编译器错误吗?你是在 Unity 中得到错误还是在你的 IDE 中得到错误? 是的,我看到了它的内容,没有其他错误。 GameLoader 文件保存了吗?标签名称旁边是否有星号? 一切都保存了。 两个类是在同一个项目中还是GameLoader在引用的dll/项目中? 【参考方案1】:

编辑: 编辑后,现在很明显问题出在哪里。 尝试将您的电话 GameLoader.LoadScene("bla"); 移动到一个方法中。 如果您希望在实例化处理程序时调用此方法,您可以将其移至构造函数。 示例:

public UiHandlerMenu() 
    GameLoader.LoadScene("bla");

【讨论】:

我什至在 Unity 中从 VS 2019 更改为 VS 2017,但仍然没有。当然,不幸的是 Unity 和 VS 重启并没有真正起作用。 您是否尝试过删除 ``` public static void LoadScene(string sceneName) `` 中的代码,然后再次清理和重建? 是的,我试过了。我什至删除了脚本文件并重新创建了它。没有结果。 如果你不需要实例化 GameLoader 类,你可以尝试在类中添加静态,否则我也没有想法:public static class GameLoader ... 查看您的编辑。GameLoader.LoadScene() 真的在类中,而不是在方法/构造函数中吗?那是错误

以上是关于C#类看不到另一个类的静态方法的主要内容,如果未能解决你的问题,请参考以下文章

c# 有调用一个类的静态方法,是不是执行这个类的构造函数

静态类的静态方法与非静态类的静态方法 (C#)

如何在C#中,在一个类里调用另外一个类的方法

静态方法与实例方法

一个类中直接调用另一个类的静态方法吗

C# 静态方法 静态属性 调用静态方法