2010-05-16 13 views
31

Bu muhtemelen aptalca bir sorudur, ancak bunu yapamıyorum. Böyle bir sınıftaki bazı çeteleler kurmak istiyorum:C# ile enum türlerine global erişim nasıl sağlanır?

Direction dir = north; 

ve muktedir: başka sınıf örneği var diye

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

Sonra bütün sınıflara erişilebilir olduğunu enum türüne sahip sınıflar arasındaki enum türü geçirmek:

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

Ben halka enum ayarı bu otomatik mümkün kılacak düşündüm ama sınıfın dışında görünür görünmüyor ı enum ilan . Bir sınıfa

cevap

46

iki şeyden birini yapabilirsiniz.

1- Taşı sınıfına

Bugün dışındaki enum bildirimi muhtemelen

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

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

2 değişecektir bu

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

gibi bir şey var - Numarayısınıf adını kullanarak referanslayın (Bu tabloyu kapaBu tabloyu kapaBu tabloyu aç.). ClassName sen.

12

Declare bir sınıf gibi bir ad kapsamında enum ancak:

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

vaka enum bir sınıfın kapsamında ilan edilir, bunu da sınıf herkese açık hale vardır:

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

Kullanımı:

MyClass.Direction dir = ... 
+1

? - abatishchev'un cevabı her şeyi açık bir şekilde açıklıyor. – Dal

3

ortak olduğunu enum ilan etmesine karşın bir sınıf içinde bir enum tanımlayan bu sınıfın bir iç tip yapar bu sınıfın adıdır

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

. Örneğin: MyNamespace ad başka bir sınıftan bu enum erişmek için

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

, sen Foo.MyEnum değil, sadece MyEnum olarak başvurmak zorunda.

namespace MyNamespace 
{ 
    public class Foo { ... } 

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

Program.cs dosyasının içinde enum tanımını koyun, ama Program sınıf dışında: sadece MyEnum olarak başvurmak istiyorsanız, sadece isim alanı içinde yerine sınıf içinde beyan. Bu, sınıf adına başvurmak zorunda kalmadan enum türünü global olarak erişilebilir hale getirecektir.

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

    static class Program 
    { 
    } 
} 

Sonra erişebilirsiniz yerde yılında böyle sınıf adını belirtmek gerek kalmadan aynı ad alanı içindeki herhangi sınıfı:

Direction d; 
d = Direction.north; 
tam olarak anlamadığınız Ne