C # -Delegat nicht an eine Instanz gebunden?

8

Gibt es eine Möglichkeit, einen Delegaten zu speichern, ohne ihn an ein Objekt zu binden, wie es mit einer MethodInfo möglich ist? Momentan speichere ich eine MethodInfo, damit ich ihr das Objekt geben kann, für das die Methode aufgerufen werden soll. Aber ich habe lieber einen Delegierten. Wie gibt es ein Attribut, das .net sagt, dass der erste Parameter "this" ist?

%Vor%     
Will 22.03.2011, 23:47
quelle

4 Antworten

11

Was Sie wollen, ist ein offener Instanzen-Delegierter . Es wird nicht direkt in der C # -Sprache unterstützt, aber die CLR unterstützt es.

Grundsätzlich ist ein offener Instanzdelegat derselbe wie ein normaler Delegat, aber er nimmt einen zusätzlichen Parameter für this vor den normalen Parametern und hat ein Nullziel (wie ein Delegat für eine statische Methode). Zum Beispiel wäre das Open-Instance-Äquivalent von Action<T> :

%Vor%

Hier ist ein komplettes Beispiel:

%Vor%

Sehen Sie sich diesen Artikel an mehr Details.

    
Thomas Levesque 23.03.2011, 00:07
quelle
5

Sie können die Methode Delegate.CreateDelegate verwenden, um einen stark typisierten Delegaten für ein MethodInfo zu erstellen.

Wenn Sie die Signatur der Methode zur Kompilierzeit nicht kennen, können Sie entweder eine Func<...> mit Reflection erstellen oder einen Lambda-Ausdruck erstellen, der die MethodInfo :

aufruft %Vor%

(Dies wird Curry genannt)

Beachten Sie, dass die Leistung bei jedem Aufruf des Delegaten immer noch von der Reflexion betroffen ist, im Gegensatz zu Delegate.CreateDelegate .

    
SLaks 22.03.2011 23:55
quelle
0

Ein Delegat ist im Wesentlichen nur ein MethodInfo (eigentlich ein MethodBase ) und eine Objektreferenz mit einigen internen Zeigern für die Leistung. Wenn Sie also ein MethodInfo haben, haben Sie im Wesentlichen einen ungebundenen Delegaten. Was ist Ihr spezifischer Anwendungsfall?

    
P Daddy 23.03.2011 00:03
quelle
0

Warum nicht einfach

%Vor%

so können Sie

%Vor%

oder sogar

%Vor%     
sehe 23.03.2011 01:04
quelle

Tags und Links