Question C #: accéder à Enum d'une autre classe


Je sais que je peux mettre mon enum dans la zone Namespace d'une classe pour que tout le monde puisse y accéder dans le même espace de noms.

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

Ce que je veux, c'est accéder à cette enum de

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

Est-ce possible en quelque sorte sans utiliser l'espace de noms?


11
2017-12-14 20:42


origine


Réponses:


Si vous essayez de faire ce qui est décrit ci-dessous, cela ne fonctionnera pas ...

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

Ce que vous pouvez faire cependant est ci-dessous, qui fonctionnera ...

    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
2017-12-14 20:45



Vous pouvez déclarer un enum en dehors d'une classe:

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

Et puis vous pouvez ajouter using MyNamespace; où il doit être utilisé.


18
2017-12-14 20:46



Oui:

class2.Mode = class2.Mode.Selected

Mais notez que vous ne pouvez pas avoir un type imbriqué qui porte le même nom que l'un des membres de la classe externe, ce code ne sera donc pas compilé. Soit le enum ou la propriété devra être nommé autre chose. Votre nom de classe et votre nom de variable sont également en conflit, ce qui rend la tâche un peu plus complexe.

Pour en faire une réponse plus générique, si vous avez ceci:

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

    public enum SomeEnum {
        Hello, World
    }
}

Ensuite, ce code affectera une valeur enum à la propriété:

Foo foo = new Foo();
foo.SomeProperty = Foo.SomeEnum.Hello;

5
2017-12-14 20:44



La réponse d'Aaron est très sympa mais je crois qu'il y a une bien meilleure façon de le faire:

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

Pas besoin de compliquer cela. C'est une tâche simple.

Bonne chance

Chris.


5
2017-10-07 08:14