Как получить глобальный доступ к перечислимым типам в C#?

Это - вероятно, глупый вопрос, но я, может казаться, не делаю это. Я хочу настроить некоторые перечисления в одном классе как это:

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

Затем имейте тот перечислимый тип, доступный для всех классов так, чтобы некоторый другой класс мог, например, иметь:

Direction dir = north;

и смогите передать перечислимый тип между классами:

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

Я думал, что установка перечисления общественности сделает это автоматически возможным, но это, кажется, не видимо за пределами класса, в котором я объявил перечисление.

32
задан abatishchev 23 April 2011 в 08:23
поделиться

3 ответа

Вы можете сделать одно из двух.

1- Переместите объявление перечисления за пределы класса

Сегодня у вас, вероятно, есть что-то вроде этого

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

, которое изменится на

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

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

2- Ссылка на перечисление, используя имя класса

ClassName.Direction.north

Например.

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

Где ClassName - это имя класса, в котором вы объявили перечисление.

52
ответ дан 27 November 2019 в 20:21
поделиться

Объявить enum в области видимости пространства имен как класс, но не в классе:

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

В случае, если enum объявлен в области видимости класса, вы также должны сделать этот класс общедоступным:

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

Использование:

MyClass.Direction dir = ...
14
ответ дан 27 November 2019 в 20:21
поделиться

Это public, но определение перечисления внутри класса делает его внутренним типом этого класса. Например:

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

Чтобы получить доступ к этому перечислению из другого класса в пространстве имен MyNamespace, вы должны ссылаться на него как Foo.MyEnum, а не просто MyEnum. Если вы хотите ссылаться на него как просто MyEnum, объявите его просто внутри пространства имен, а не внутри класса:

namespace MyNamespace
{
    public class Foo { ... }

    public enum MyEnum { One, Two, Three }
}
4
ответ дан 27 November 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: