2010-05-16 28 views
31

Đây có lẽ là một câu hỏi ngu ngốc, nhưng tôi dường như không thể làm được. Tôi muốn thiết lập một số enums trong một lớp học như thế này:Làm thế nào để truy cập toàn cầu vào các loại enum trong C#?

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

Sau đó có kiểu enum thể truy cập đến tất cả các lớp học để một số lớp khác có thể ví dụ có:

Direction dir = north; 

và có thể chuyển loại enum giữa các lớp:

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

Tôi nghĩ rằng việc đặt công khai thành công sẽ làm cho điều này tự động có thể, nhưng dường như không hiển thị bên ngoài lớp tôi đã khai báo enum .

Trả lời

46

Bạn có thể làm một trong hai điều.

1- Move việc kê khai của enum bên ngoài của lớp

Hôm nay bạn có thể có một cái gì đó như thế này

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

nào sẽ thay đổi để

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

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

2 - Tham khảo enum bằng tên lớp

ClassName.Direction.north 

Ví dụ:

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

đâu ClassName là tên của lớp mà bạn đã khai báo enum trong.

12

Declare enum trong phạm vi của một namespace như một lớp học nhưng không vào một lớp học:

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

Trong trường hợp enum được khai báo trong phạm vi của một lớp, bạn phải làm cho lớp công cộng này quá:

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

Cách sử dụng:

MyClass.Direction dir = ... 
+1

Chính xác những gì không hiểu sao? - câu trả lời của abatishchev giải thích tất cả rất rõ ràng. – Dal

3

Đó là công khai, nhưng việc xác định một enum bên trong một lớp học làm cho nó một loại bên trong của lớp đó. Ví dụ:

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

Để truy cập enum này từ một lớp khác trong không gian tên MyNamespace, bạn phải tham khảo nó như Foo.MyEnum, không chỉ MyEnum. Nếu bạn muốn tham chiếu đến nó một cách đơn giản MyEnum, tuyên bố nó chỉ bên trong namespace chứ không phải bên trong lớp:

namespace MyNamespace 
{ 
    public class Foo { ... } 

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

Đặt nét enum bên trong của tập tin Program.cs, nhưng bên ngoài của lớp Program. Điều này sẽ làm cho loại enum có thể truy cập được trên toàn cầu mà không cần phải tham chiếu đến tên lớp.

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

    static class Program 
    { 
    } 
} 

Sau đó, bạn có thể truy cập nó bất cứ nơi nào trong bất kỳ lớp trong namespace cùng mà không cần phải ghi rõ tên lớp như thế này:

Direction d; 
d = Direction.north; 
Các vấn đề liên quan