C#: доступ к перечислению из другого класса
Я знаю, что могу поместить свое перечисление в область пространства имен класса, чтобы каждый мог получить доступ к нему в том же пространстве имен.
// defined in class2
public enum Mode { Selected, New, }
Я хочу получить доступ к этому перечислению из
public class1
{
var class2 = new class2();
// Set the Mode
class2.Mode = Model.Selected
}
возможно ли это как-то без использования области пространства имен?
4 ответов
Если вы пытаетесь сделать то, что описано ниже, это не будет работать...
public class MyClass1
{
private enum Mode { New, Selected };
public Mode ModeProperty { get; set; }
}
public class MyClass2
{
public MyClass2()
{
var myClass1 = new MyClass1();
//this will not work due to protection level
myClass1.ModeProperty = MyClass1.Mode.
}
}
то, что вы могли бы сделать, однако, ниже, что будет работать...
public interface IEnums
{
public enum Mode { New, Selected };
}
public class MyClass1
{
public IEnums.Mode ModeProperty { get; set; }
}
public class MyClass2
{
public MyClass2()
{
var myClass1 = new MyClass1();
//this will work
myClass1.ModeProperty = IEnums.Mode.New;
}
}
вы можете объявить перечисление вне класса:
namespace MyNamespace
{
public enum MyEnum
{
Entry1,
Entry2,
}
}
и затем вы можете добавить using MyNamespace;
где его нужно использовать.
Да:
class2.Mode = class2.Mode.Selected
но обратите внимание, что вы не можете определить вложенный тип, который имеет то же имя, что и один из членов внешнего класса, поэтому этот код не будет компилироваться. Либо перечисление, либо свойство должно быть названо как-то иначе. Ваше имя класса и имя переменной также конфликтуют, что делает это немного более сложным.
чтобы сделать это более общим ответом, если у вас есть это:
public class Foo
{
public SomeEnum SomeProperty { get; set; }
public enum SomeEnum {
Hello, World
}
}
тогда этот код присвоит значение перечисления свойство:
Foo foo = new Foo();
foo.SomeProperty = Foo.SomeEnum.Hello;
Аарон очень хороший, но я считаю, что есть гораздо лучший способ сделать это:
public static class class1
{
public void Run()
{
class2.Mode mode = class2.Mode.Selected;
if (mode == class2.Mode.Selected)
{
// Do something crazy here...
}
}
}
public static class class2
{
public enum Mode
{
Selected,
New
}
}
нет смысла усложнять это. Это простая задача.
всего наилучшего
Крис.