我在 public 类中有一个枚举,定义如下:
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指令或程序集引用?)
有谁知道我收到此错误的原因?
这是我预料到的第二个错误,因为在过去引用 enum 类型时,我总是必须首先使用类名称来限定它,然后是枚举类型名称。
<Class Name>.<Enum Name> myValue = <Class Name>.<Enum Name>.<Enum Value>
这引出了另一个我要问的问题。有时当我声明一个 enum 类型的变量时,我也要添加名称空间名称,甚至虽然我的班级有正确的使用语句。例如:
<Namespace Name>.<Class Name>.<Enum Name> myValue = <Namespace Name>.<Class Name>.<Enum Name>.<Enum Value>
这会导致一些奇怪的变量声明。例如,在我的一个类中,我有一个 enum 变量,如下所示:
using namespace NS1;
...
...
NS1.MyClass.ModeEnum myMode = NS1.MyClass.ModeEnum.Auto;
任何人都可以向我指出为什么以及何时需要首先使用命名空间来限定事物?
我试图解决这个问题,但坦白地说,我太忙了,学习正在发生的事情。我只是简单地添加了命名空间名称。 :P
答案 0 :(得分:1)
从您的错误消息中,您似乎有两个 MyClass
,而您未告诉过我们的是 MyStaticClass
看起来你通过嵌套类型让自己感到困惑。除非有充分的理由,否则不要将类或枚举放在其他类中。将所有类和枚举直接放在命名空间下更容易。
编辑:我只是在评论(问题,而不是下面)中看到问题是命名空间及其中的类型具有相同的名称。