C #: Einschränken von Typen in Methodenparametern (keine generischen Parameter)

8

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?

    
kpozin 20.05.2009, 03:15
quelle

6 Antworten

9

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.

    
Timothy Carter 20.05.2009, 03:20
quelle
3

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.

    
Colin Burnett 20.05.2009 03:29
quelle
2

Sie können Folgendes verwenden:

%Vor%

Der Anruf würde wie folgt aussehen:

%Vor%     
Pat 20.05.2009 03:29
quelle
1

Was Sie wollen, könnte theoretisch mit Attributen gemacht werden. Aber das ist viel klarer (imo) und macht genau dasselbe:

%Vor%     
John Feminella 20.05.2009 03:27
quelle
0

Warum benutzt du nicht

? %Vor%

stattdessen?

    
Ali Shafai 20.05.2009 03:22
quelle
0

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%     
Bojan Resnik 20.05.2009 08:20
quelle

Tags und Links