Domanda

Lo so che non è possibile utilizzare l'ereditarietà con le enumerazioni, così nella mia classe di base voglio definire che le classi che implementano lo devono restituire un enum di qualche tipo per una proprietà.

Idealmente, questo sarebbe come:

public abstract BaseEnum MyEnum { get; set; }

Poi tutti gli esecutori avrebbero dovuto restituire una qualche forma di enum. Ma ovviamente BaseEnum non esiste. Posso utilizzare l'oggetto, ma io preferirei di no.

C'è un bel modo di fare questo?

Modifica che sto chiedendo questo perché essenzialmente voglio mantenere il nome della proprietà nelle classi che implementano la stessa - so che non sarò in grado di lavorare con l'enumerazione in la classe di base, ma se non ho messo nella base, poi le classi di attuazione potrebbe decidere sui propri nomi di proprietà per il loro enum, che potrebbe diventare poco chiaro nel corso del tempo, come sarebbero deriva verso le loro implementazioni.

È stato utile?

Soluzione

Il più vicino si può facilmente venire in C # è quello di rendere il tipo generico con un vincolo di struct:

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

poi

public class DerivedClass : BaseClass<SomeEnum>

C # non ti consente di specificare un vincolo limitando di ENUM tipi, anche se il CLI non sostenerlo. Ho un progetto chiamato Unconstrained Melody che utilizza post-generazione trucchi per far rispettare tale vincolo - ma non vorrei suggerire di prendere lo stesso approccio a meno che non ti senti un po 'audace. Il vincolo struct sarà almeno si limita a tipi di valore, che può essere abbastanza buono.

Altri suggerimenti

Tutte le enumerazioni ereditano dalla System.Enum.

Si dovrebbe dare un'occhiata qui: Enum “Inheritance” :

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top