вложенное перечисление в c # и классах - PullRequest
7 голосов
/ 25 октября 2011

Я слышал, что в C # вложение enum невозможно. Тогда как можно преобразовать следующую структуру в иерархию классов или что-то еще. Поэтому я хочу, чтобы класс действовал как enum

enter image description here

Ответы [ 4 ]

4 голосов
/ 25 октября 2011

вложенных классов и константных полей

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;
    }
}
2 голосов
/ 25 октября 2011
public class Cat1
{
  public enum Publicpart
  {
     Xyz
  }

  private enum Privatepart
  {
     Abc, Mno, Pqr
  }
}

тогда вы можете назвать это так

Cat1.Publicpart.Xyz

или если у вас есть личный доступ

Cat1.Privatepart.Abc
1 голос
/ 25 октября 2011

Вам следует переосмыслить, если вы хотите решить эту проблему с помощью перечислений, потому что первая категория перечислений представляет для меня какую-то концепцию "видимости", тогда как вторая категория действительна только для экземпляров с видимостью "public".

Как насчет решения вашей проблемы примерно так:

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
}
1 голос
/ 25 октября 2011

вы можете использовать hirerchy в качестве структуры класса, каждый класс которой имеет собственное свойство enum

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...