C #: доступ к Enum из другого класса - PullRequest
12 голосов
/ 14 декабря 2010

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

// defined in class2
public enum Mode { Selected, New, }  

Я хочу получить доступ к этому перечислению с

public class1
{
   var class2 = new class2();
   // Set the Mode
   class2.Mode = Model.Selected
}

Возможно ли это как-то без использования области пространства имен?

Ответы [ 4 ]

18 голосов
/ 14 декабря 2010

Вы можете объявить enum вне класса:

namespace MyNamespace
{
    public enum MyEnum
    {
        Entry1,
        Entry2,
    }
}

И затем вы можете добавить using MyNamespace; там, где его нужно использовать.

6 голосов
/ 07 октября 2014

Ответ Аарона очень хороший, но я считаю, что есть гораздо лучший способ сделать это:

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
    } 
}

Нет смысла усложнять это. Это простая задача.

Все лучшее

Крис.

5 голосов
/ 14 декабря 2010

Если вы пытаетесь сделать то, что описано ниже, это не сработает ...

    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;
        }
    }
5 голосов
/ 14 декабря 2010

Да:

class2.Mode = class2.Mode.Selected

Но учтите, что нельзя определить вложенный тип с тем же именем, что и у одного из членов внешнего класса, поэтому этот код не будет компилироваться.Либо перечисление, либо свойство должно быть названо как-то иначе.Ваше имя класса и имя переменной также конфликтуют, делая это немного более сложным.

Чтобы сделать этот ответ более общим, если у вас есть это:

public class Foo
{
    public SomeEnum SomeProperty { get; set; }

    public enum SomeEnum {
        Hello, World
    }
}

Тогда этот код назначитenum значение для свойства:

Foo foo = new Foo();
foo.SomeProperty = Foo.SomeEnum.Hello;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...