我在一个公共类中有一个枚举,定义如下:
namespace NS1
{
public class MyClass
{
public enum ModeEnum { Auto, Manual };
}
}
我还有一个静态类,我试图在其中使用这个枚举类型(注意它们都属于同一个命名空间):
namespace NS1
{
public static class MyStaticClass
{
public static MyClass.ModeEnum mode = MyClass.ModeEnum.Auto;
}
}
MyStaticClass不会编译。编译器给出以下错误:
“NS1.MyStaticClass.MyClass.ModeEnum”类型中不存在类型名称“ModeEnum”
如果我将模式的定义更改为以下内容:
public static ModeEnum mode = ModeEnum.Auto;
我得到一个稍微不同的错误:
找不到类型或命名空间名称“ModeEnum”(您是否缺少 using 指令或程序集引用?)
有谁知道我为什么会收到这个错误?
这第二个错误我有点预料到,因为在过去引用枚举类型时,我总是必须先用类名限定它,然后是枚举类型名。
<Class Name>.<Enum Name> myValue = <Class Name>.<Enum Name>.<Enum Value>
这带来了另一个我一直想问的问题。有时当我声明一个枚举类型的变量时,我也必须添加命名空间名称,即使我的类有正确的using语句。例如:
<Namespace Name>.<Class Name>.<Enum Name> myValue = <Namespace Name>.<Class Name>.<Enum Name>.<Enum Value>
这会导致一些看起来很奇怪的变量声明。例如,在我的一个类中,我有一个枚举变量,如下所示:
using namespace NS1;
...
...
NS1.MyClass.ModeEnum myMode = NS1.MyClass.ModeEnum.Auto;
谁能向我指出为什么以及何时需要首先使用命名空间来限定事物?
我试图弄清楚,但坦率地说,我太忙了,无法了解发生了什么。我只是简单地添加了命名空间名称。:P