Это - вероятно, глупый вопрос, но я, может казаться, не делаю это. Я хочу настроить некоторые перечисления в одном классе как это:
public enum Direction { north, east, south, west };
Затем имейте тот перечислимый тип, доступный для всех классов так, чтобы некоторый другой класс мог, например, иметь:
Direction dir = north;
и смогите передать перечислимый тип между классами:
public void changeDirection(Direction direction) {
dir = direction;
}
Я думал, что установка перечисления общественности сделает это автоматически возможным, но это, кажется, не видимо за пределами класса, в котором я объявил перечисление.
Вы можете сделать одно из двух.
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
- это имя класса, в котором вы объявили перечисление.
Объявить 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 = ...
Это 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 }
}