Question

Je sais que vous ne pouvez pas utiliser l'héritage avec les énumérations, donc dans ma classe de base que je veux définir que les classes qui la mettent en œuvre doivent retourner un ENUM d'un certain type d'une propriété.

Idéalement, ce serait comme:

public abstract BaseEnum MyEnum { get; set; }

Alors toutes les implémenteurs devraient revenir une certaine forme de ENUM. Mais évidemment BaseEnum n'existe pas. Je peux utiliser l'objet, mais je préfère ne pas.

Y at-il une bonne façon de le faire?

Modifier Je demande cela parce que je veux essentiellement de garder le nom de la propriété dans les cours de mise en œuvre de la même - je sais que je ne serai pas en mesure de travailler avec le ENUM en la classe de base, mais si je ne l'ai pas mis dans la base, puis les cours de mise en œuvre pourrait décider de leur propre nom de propriété pour leur ENUM, qui pourrait devenir peu clair au fil du temps, comme ils le feraient dériver vers leurs propres implémentations.

Était-ce utile?

La solution

Le plus proche, vous pouvez facilement venir en C # est de rendre le type générique avec une contrainte de struct:

public abstract class BaseClass<T> where T : struct
{
    public abstract T MyEnum { get; set; }
}

puis

public class DerivedClass : BaseClass<SomeEnum>

C # ne vous permet de spécifier une contrainte vous limiter à ENUM types, même si la CLI le supporte. J'ai un projet appelé Melody Unconstrained qui utilise des tours post-construction pour imposer une telle contrainte - mais je ne vous suggère de prendre la même approche à moins que vous vous sentez un peu audacieux. La contrainte de struct vous limiter au moins les types de valeur, qui peut être assez bon.

Autres conseils

Tous les énumérations héritent de System.Enum.

Vous devriez jeter un coup d'oeil ici: Enum « Héritage » :

See section 8.5.2 of the CLI spec for the full details.
Relevant information from the spec

 * All enums must derive from System.Enum
 * Because of the above, all enums are value types and hence sealed
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top