如何避免在C#命名空间中定义的冗余枚举?

时间:2014-04-19 13:15:19

标签: c# enums namespaces

enum上刷新时,我在MSDN Developer Network's site处遇到了以下情况。

  

通常最好直接在命名空间中定义枚举   命名空间中的所有类都可以使用相同的方式访问它   方便。但是,枚举也可以嵌套在类或中   结构

这是有道理的,因为我需要所有的枚举都可用于我项目中的所有类。但是,我似乎无法找到任何例子。这是我到目前为止所做的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace myNamespace
{
    enum foo {A, B, C, D}
    enum foo2 {E, F, G, H}

    class Myclass
    {
          magicHappens();
    }
}

我想知道是否需要将enum包含在我在此命名空间中包含的每个文件中,或者如果仅在一个文件中定义它将在编译时将这些枚举定义整合到项目中?它需要一个特定的课程吗?或者最好的做法是创建一个除了定义命名空间级枚举之外什么也不做的文件?

任何提示将不胜感激。

4 个答案:

答案 0 :(得分:1)

在自己的源文件中定义每个枚举(例如foo.cs)。只要命名空间与您的类相同,它就可以在您的其他代码文件中使用。

Foo.cs:

namespace myNamespace
{
    public enum foo
    {
        A = 0,
        B,
        C,
        D,
    }
}

Foo2.cs:

namespace myNamespace
{
    public enum foo2
    {
        E = 0,
        F,
        G,
        H,
    }
}

答案 1 :(得分:1)

你说你是在课堂上创建枚举,但事实并非如此。这就是类中的枚举:

namespace myNamespace
{

    class Myclass
    {
        enum foo {A, B, C, D}
        enum foo2 {E, F, G, H}
        magicHappens();
    }
}

我认为您可能会将类定义与文件混淆。您可以在文件中放置任意数量的类或结构或枚举。

答案 2 :(得分:0)

  

通常最好直接在命名空间中定义枚举   命名空间中的所有类都可以使用相同的方式访问它   方便。但是,枚举也可以嵌套在类或中   结构

您似乎误解了上述陈述。它表示在命名空间级别定义枚举不在另一种类型的范围内。

这样做:

namespace myNamespace
{
    enum foo {A, B, C, D} //Note enum is outside the class 

    class Myclass
    {
        magicHappens();
    }
}

不要执行此操作:

namespace myNamespace
{
    class Myclass
    {
        magicHappens();

        enum foo //Note enum is inside the class
        {
           A,
           B,
           C,
           D
        }
    }
}

并且理想情况下,在这种情况下,您应该为您的枚举分别使用“.cs”文件“foo.cs”。

答案 3 :(得分:0)

您可以使用enum访问修饰符定义public,因此在其他程序集中,您可以通过使用引用其命名空间的方式来访问它们,如果您希望使用它们可见使用他们的命名空间你可以在例如System命名空间中定义你的枚举,默认情况下在所有类中引用System然后你不需要使用语句添加nay,ps不推荐这种方法。