Frage

Ich weiß, dass Sie nicht Erbe mit Aufzählungen verwenden können, so in meiner Basisklasse mag ich festlegen, dass die Klassen, die sie implementieren muss eine ENUM eines Typs für eine Eigenschaft zurück.

Im Idealfall würde dies wie:

public abstract BaseEnum MyEnum { get; set; }

Dann werden alle Implementierer würde irgendeine Form von Enum zurückkehren. Aber offensichtlich ist BaseEnum nicht existieren. Ich kann Objekt verwenden, aber ich möchte lieber nicht.

Gibt es eine schöne Möglichkeit, dies zu tun?

Edit: Ich frage das, weil ich im Wesentlichen die gleichen den Namen der Eigenschaft in den implementierenden Klassen behalten wollen - ich weiß, dass ich die Arbeit mit dem ENUM nicht in der Lage sein wird, in die Basisklasse, aber wenn ich es nicht in der Basis gelegt habe, dann ist die implementierenden Klassen auf ihrem eigenen Grundstück Namen für ihr eNUM entscheiden könnten, was im Laufe der Zeit unklar werden könnte, da sie gegenüber ihren eigenen Implementierungen treiben würden.

War es hilfreich?

Lösung

Die nächstgelegene Sie leicht in C # kommen können, ist die Art Gattungs mit einer Struktur Einschränkung zu machen:

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

dann

public class DerivedClass : BaseClass<SomeEnum>

C # finden Sie eine Einschränkung nicht zulassen, geben Sie beschränken Sie Typen ENUM, obwohl die CLI Unterstützung tut es. Ich habe ein Projekt namens Unconstrained Melody die Post-Build-Tricks verwendet eine solche Einschränkung zu erzwingen - aber ich würde Sie den gleichen Ansatz nicht den Eindruck erwecken, es sei denn, Sie fühlen sich ein wenig gewagt. Die Struktur Einschränkung zumindest begrenzen Sie Werttypen, die gut genug sein kann.

Andere Tipps

Alle Aufzählungen erben von System.Enum.

Sie sollten einen Blick hier: Enum „Vererbung“ :

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top