Ich möchte eine Funktion wie die folgende programmieren
%Vor% Mit anderen Worten, der Argumenttyp ist System.Type
, und ich möchte die zulässigen Type
s auf diejenigen beschränken, die von MyClass
abgeleitet sind.
Gibt es eine Möglichkeit, dies syntaktisch zu spezifizieren, oder muss t
zur Laufzeit überprüft werden?
Wenn Ihre Methode einen Type-Typ als Argument verwenden muss, dann gibt es dafür keine Möglichkeit. Wenn Sie Flexibilität mit dem Methodenaufruf haben, könnten Sie Folgendes tun: public void Foo (MyClass myClass) und den Typ durch Aufruf von .GetType () erhalten.
Um ein wenig zu erweitern. System.Type ist der Typ des Arguments, daher gibt es keine Möglichkeit, weiter zu spezifizieren, was übergeben werden soll. Genau wie eine Methode, die eine Ganzzahl zwischen 1 und 10 annimmt, muss ein int und dann die Laufzeit überprüfen, ob die Grenzwerte eingehalten wurden.
Wenn Sie den Typ von MyClass angeben oder davon abgeleitet werden, ist eine Wertprüfung für das Argument selbst. Es ist so, als würde man den Hallo-Parameter in
sagen %Vor%muss zwischen 10 und 100 liegen. Eine Überprüfung zur Kompilierzeit ist nicht möglich.
Sie müssen Generics verwenden oder den Typ zur Laufzeit überprüfen, genau wie jede andere Parameterwertüberprüfung.
Was Sie wollen, könnte theoretisch mit Attributen gemacht werden. Aber das ist viel klarer (imo) und macht genau dasselbe:
%Vor%Sie können auch eine Erweiterungsmethode verwenden, die für alle Objekte verfügbar ist, die in MyClass konvertierbar sind:
%Vor%Und Sie können es verwenden, als wäre es eine gewöhnliche Methode eines Objekts:
%Vor%Tags und Links .net c# types polymorphism