2010-05-16 118 views
31

這可能是一個愚蠢的問題,但我似乎無法做到這一點。我想成立一​​個類中的一些枚舉這樣的:如何獲得全局訪問C#中的枚舉類型?

public enum Direction { north, east, south, west }; 

然後讓所有的類都可以訪問該枚舉類型,以便其它的類可以例如有:

Direction dir = north; 

,並能夠通過枚舉類型類之間:

public void changeDirection(Direction direction) { 
    dir = direction; 
} 

我認爲枚舉設置公共將使這個自動可能的,但似乎並沒有成爲類的外部可見我宣佈在枚舉。在這樣一類命名空間的範圍

回答

46

你可以做兩件事情之一。

移動的枚舉的類

今天外面的聲明,你可能有這樣的事情

public class ClassName 
{ 
    public enum Direction 
    { 
    north, south, east, west 
    } 
    // ... Other class members etc. 
} 

這將改變以

public class ClassName 
{  
    // ... Other class members etc. 
} 

// Enum declared outside of the class 
public enum Direction 
{ 
    north, south, east, west 
} 

2 -使用類名稱引用枚舉

ClassName.Direction.north 

例如,

public void changeDirection(ClassName.Direction direction) { 
    dir = direction; 
} 

哪裏ClassName是類的名字,你宣佈。

12

申報枚舉,但不是到一個類:

namespace MyApplication 
{ 
    public enum Direction { north, east, south, west }; 
} 

如果枚舉在類的範圍內聲明的,你必須讓這個類的公共太:

namespace MyApplication 
{ 
    public class MyClass 
    { 
     public enum Direction { north, east, south, west }; 
    } 
} 

用法:

MyClass.Direction dir = ... 
+1

正是你難道不明白是什麼? - abatishchev的回答很清楚地解釋了這一點。 – Dal 2010-05-16 18:29:18

3

這是公衆的枚舉,但定義一個類內部的枚舉使得它的內部類型的類。例如:

namespace MyNamespace 
{ 
    public class Foo 
    { 
     public enum MyEnum { One, Two, Three } 
    } 
} 

爲了從另一個類訪問此枚舉在MyNamespace命名空間,你必須引用它作爲Foo.MyEnum,不只是MyEnum。如果你想引用它作爲簡單MyEnum,聲明只是它的命名空間裏,而不是在類中:

namespace MyNamespace 
{ 
    public class Foo { ... } 

    public enum MyEnum { One, Two, Three } 
} 
1

enum定義Program.cs文件裏,但Program類之外。這將使全局訪問類型爲enum,而不必引用類名稱。

namespace YourApp 
{  
    enum Direction { north, east, south, west }; 

    static class Program 
    { 
    } 
} 

然後你就可以訪問它任何地方同一個命名空間內的任何類,而不需要指定類名像這樣:

Direction d; 
d = Direction.north;