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

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

всего наилучшего

Крис.