2011-10-25 47 views
7

Tôi nghe nói rằng làm tổ của enum là không thể trong C#. Sau đó, làm thế nào có thể chuyển đổi các cấu trúc sau đây để một hệ thống phân cấp lớp hoặc cái gì khác. Vì vậy, tôi muốn các lớp để hoạt động như một enumlồng nhau enum trong C# và các lớp học

enter image description here

+1

những gì đã bạn đã cố gắng cho đến nay? nó có hoạt động không? nếu không, nó phải làm gì? – Alex

+1

Bạn có nghĩa là một enum hoặc enumerable? Ở trên trông giống như một cái gì đó mà sẽ được mô hình hóa bởi một enumerable hơn bởi một enum. –

+0

Câu hỏi này cũ, nhưng tôi đã đưa ra một gợi ý (trên dự án roslyn github) để thực hiện tính năng này trong các phiên bản tiếp theo của C# http://github.com/dotnet/roslyn/issues/13192 – lmcarreiro

Trả lời

4

lớp lồng nhau và các lĩnh vực const

class Cat1 
{ 
    public const int Public = 1; 
    public class Private 
    { 
     public const int Abc = 2; 
     public const int Mno = 3; 
     public const int Pqr = 4; 
    } 
} 
+4

Và trong khi bạn đang ở đó, đánh dấu các lớp tĩnh. – ver

+1

Đáng chú ý biến sẽ chỉ là một 'int', vì vậy có thể nhận được một giá trị không hợp lệ từ một nơi khác. –

1

bạn có thể sử dụng hirerchy như cấu trúc lớp, mà mỗi lớp có một tài sản của riêng của mình enum

2
public class Cat1 
{ 
    public enum Publicpart 
    { 
    Xyz 
    } 

    private enum Privatepart 
    { 
    Abc, Mno, Pqr 
    } 
} 

sau đó bạn có thể gọi nó như thế này

Cat1.Publicpart.Xyz 

hoặc nếu bạn có acces tin

Cat1.Privatepart.Abc 
1

Bạn nên suy nghĩ lại nếu bạn muốn giải quyết vấn đề này thông qua enums vì loại enum đầu tiên đại diện cho tôi một số loại "tầm nhìn" khái niệm trong khi loại thứ hai là chỉ hợp lệ các trường hợp có khả năng hiển thị "công khai".

gì về cách giải quyết vấn đề của bạn với một cái gì đó như thế này:

public enum Visibility 
{ 
    Public, 
    Private 
} 

public abstract class VisibilityState 
{ 
    public Visibility Visibility { get; private set; } 

    protected VisibilityState(Visibility visibility) 
    { 
     Visibility = visibility; 
    } 
} 

public class PublicVisibilityState : VisibilityState 
{ 
    public PublicVisibilityState() : base(Visibility.Public) { } 
} 

public class PrivateVisibilityState : VisibilityState 
{ 
    public PrivateVisibilityState() : base(Visibility.Private) { } 
    public OtherEnum OtherEnumState { get; set; } 
} 

public enum OtherEnum 
{ 
    Abc, Mno, Pqr 
} 
Các vấn đề liên quan