C#调用静态方法无需加类名前缀的实现方法及Unity示例差异原因
问题原因
你能直接调用Unity的FindObjectOfType<T>()不需要加类名,是因为你的调用代码写在继承自UnityEngine.MonoBehaviour(或其父类UnityEngine.Object)的子类脚本中。FindObjectOfType<T>()本身就是UnityEngine.Object类内置的静态方法,子类中调用父类的成员(包括静态成员)不需要额外添加父类类名作为前缀。
而你自己实现的GetISystemComponent<T>()是定义在独立的静态类References中,和你写调用代码的类没有继承关系,所以默认情况下必须加类名前缀才能调用。
解决方法
使用C# 6及更高版本支持的using static语法即可实现免前缀调用,操作很简单:
在你需要调用该方法的脚本顶部,命名空间引用区添加如下代码:
// 如果References类放在自定义命名空间下,写法如下,替换成你自己的命名空间即可 using static MyNamespace.References; // 如果References类没有定义在任何自定义命名空间下,写法如下 using static References;
添加后你就可以直接在该脚本中调用方法,不需要加前缀:
mM = GetISystemComponent<MazeManager>();
注意事项
如果你的项目中多个不同静态类存在同名的静态方法,免前缀调用会产生编译歧义,这种情况下还是需要添加类名前缀明确指定调用来源。
内容的提问来源于stack exchange,提问作者Martin Ma
相关产品推荐
相关产品推荐

