Gibt es eine Möglichkeit, die Varianz einer Schnittstelle / eines Delegaten in C # 4.0 zu bestimmen?

8

Nun, da wir die generische Kovarianz und Kontravarianz für Interfaces und Delegaten in C # haben, war ich nur neugierig, wenn Sie eine Type angeben, können Sie die Kovarianz / Kontravarianz ihrer generischen Argumente herausfinden. Ich fing an, zu versuchen, meine eigene Implementierung zu schreiben, die alle Methoden auf einem gegebenen Typ durchsehen und sehen würde, ob die Rückgabetypen und oder Argumente mit den Typen in den allgemeinen Argumenten übereinstimmen. Das Problem ist, dass selbst wenn ich das habe:

%Vor%

mit meiner Logik, es sieht aus wie es sollte kontravariant sein, aber da wir eigentlich nicht spezifiziert:

%Vor%

(der Parameter in) ist nicht wirklich kontravariant. Was zu meiner Frage führt: Gibt es eine Möglichkeit, die Varianz generischer Parameter zu bestimmen?

    
BFree 27.05.2010, 04:19
quelle

1 Antwort

5

Ich weiß nicht, warum Sie das wollen, ABER Sie können es mit Reflexion von außerhalb des Typs betrachten. Hier finden Sie Informationen zum Betrachten generischer Parameter für einen Typ mit Reflektion:

Ссылка

Insbesondere die Eigenschaft Type.GenericParameterAttributes des Typs, den Sie von einem Aufruf von Type.GetGenericParameters zurückerhalten, zeigt die Co / Contravariance-Eigenschaften des generischen Arguments ... es ist eine bitweise Enumeration, die die Kombination dieser Informationen aufdeckt:

Ссылка

Wirklich interessant ... danke, dass du das fragst und mich nachsehen lässt.

    
Anderson Imes 27.05.2010, 04:39
quelle