2011-10-25 14 views
7

Escuché que el anidamiento de enum no es posible en C#. Entonces, ¿cómo puede convertir la siguiente estructura a una jerarquía de clases u otra cosa? Así que quiero que la clase actúe como un enumenum anidado en C# y clases

enter image description here

+1

lo ha intentado hasta ahora? Funciona ? si no, ¿qué se supone que debe hacer? – Alex

+1

¿Te refieres a una enumeración o un enumerable? Lo anterior se parece más a algo que sería modelado por un enumerable que por una enumeración. –

+0

Esta pregunta es antigua, pero hice una sugerencia (en el proyecto roslyn github) para implementar esta característica en las próximas versiones de C# http://github.com/dotnet/roslyn/issues/13192 – lmcarreiro

Respuesta

4

clases anidadas y campos 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

Y mientras lo hace, marque las clases estáticas. – ver

+1

Merece la pena señalar que la variable sería simplemente un 'int', por lo que podría obtener un valor no válido de otro lugar. –

1

puede utilizar el hirerchy como estructura de clases, que cada clase tiene una propiedad de su propia de enumeración

2
public class Cat1 
{ 
    public enum Publicpart 
    { 
    Xyz 
    } 

    private enum Privatepart 
    { 
    Abc, Mno, Pqr 
    } 
} 

entonces puedes llamarlo como esto

Cat1.Publicpart.Xyz 

o si tiene acceso privado

Cat1.Privatepart.Abc 
1

Usted debe reconsiderar si se quiere resolver estos problemas a través de las enumeraciones porque la primera categoría enumeración representa para mí una especie de concepto de "visibilidad", mientras que la segunda categoría es solo válido de instancias con visibilidad "pública".

¿Qué pasa con la solución de su problema con algo como esto:

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 
}