全局名称空间接管使用名称空间
本文关键字:空间 全局 | 更新日期: 2023-09-27 18:21:19
我觉得这是一个愚蠢的问题,但我可以;我似乎不明白为什么会发生这种事。考虑以下内容:
// file: A.cs
class A {
public static string ns = "global";
}
// file: myNamespace'A.cs
namespace myNamespace {
class A {
public static string ns = "myNamespace";
}
}
// in some other file...
using myNamespace;
class myClass {
public void myMethod() {
Console.WriteLine(A.ns);
}
}
// OUTPUT: global
现在,由于我已经声明要使用myNamespace;为什么编译器固执地试图使用全局版本而不是命名空间版本?如果要这样做,使用有什么意义?
当然,我真正的代码比这更复杂。在我在(Unity API)中遇到的实际代码中,我在一个更像这样的情况下得到了一个编译错误:
A myObj = gameObject.GetComponent<A>();
这给了我一个论点的例外。不确定这是否与泛型有关?我是不是错过了一些非常愚蠢的东西?
我现在无法测试它或找到规范,但我相信解析规则会搜索调用代码首先所在的命名空间。由于调用代码在全局名称空间中,因此首先搜索该名称空间。如果您将调用代码放在myNamespace
命名空间中,我怀疑您会得到您想要的行为。
如果调用代码不在或命名空间中,那么您应该得到一个"不明确类型"的编译器错误。
还要注意,您的类默认情况下是internal
,尽管如果您的类都在同一个程序集中,这应该是一个问题。