2011-10-25 22 views
7

enum'un yuvalanmasının C# içinde mümkün olmadığını duydum. Daha sonra aşağıdaki yapıyı bir sınıf hiyerarşisine veya başka bir şeye dönüştürebilirsiniz. Bu yüzden sınıf olarak hareket etmek istediğiniz bir enumiç içe enum C# ve sınıfları

enter image description here

+1

? çalışıyor mu ? eğer hayırsa, ne yapması gerekiyor? – Alex

+1

Bir numara mı yoksa bir numara mı var? Yukarıdakiler, bir numaradan daha sayısız tarafından modellenecek bir şeye benzemektedir. –

+0

Bu soru eskidir, ancak bu özelliği C# http://github.com/dotnet/roslyn/issues/13192 – lmcarreiro

cevap

4

iç içe sınıflar ve const alanlar

enum kendi başına bir özelliği vardır sınıfsal yapısı olarak hirerchy kullanabilirsiniz
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

'un sonraki sürümlerinde uygulamak için bir öneri (roslyn github projesinde) yaptım. sınıfları statik olarak işaretleyin. – ver

+1

Değişkene dikkat etmek sadece bir "int" olurdu, bu yüzden başka bir yerden geçersiz bir değer verilebilir. –

1

her sınıf

2
public class Cat1 
{ 
    public enum Publicpart 
    { 
    Xyz 
    } 

    private enum Privatepart 
    { 
    Abc, Mno, Pqr 
    } 
} 

o zaman bu

gibi diyebilirsin
Cat1.Publicpart.Xyz 

veya özel acces

varsa
Cat1.Privatepart.Abc 
1

ilk enum kategorisi bana "görünürlük" kavramının bir çeşit temsil ettiği İkinci kategori ise çeteleler üzerinden bu sorunları çözmek istiyorsanız tekrar düşünmek gerekir sadece "public" görünürlüğüne sahip örnekler için geçerlidir.

Ne böyle bir şey ile sorununuzu çözme konusunda: Şimdiye kadar ne denedim

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 
}