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%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>
:
Hier ist ein komplettes Beispiel:
%Vor%Sehen Sie sich diesen Artikel an mehr Details.
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
:
(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
.
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?
Tags und Links c#