2 Stimmen

Wo werden die Konstruktoren und Memberfunktionen von Delegierten definiert?

Als ich mir die Action-Delegaten in Reflector anschaute, sah ich, dass es einen Konstruktor wie

public Action(object @object, IntPtr method);

gibt. Aber ich konnte keinen Körper dafür finden, genauso wenig wie für andere Memberfunktionen wie Invoke, BeginInvoke usw. Ich sehe nur die Definitionen dafür. Wo werden diese Funktionen definiert? Sind sie außerhalb der .NET-BCLs definiert?

4voto

Jon Skeet Punkte 1325502

Delegaten werden vom CLR speziell behandelt. Der Compiler liefert die Signaturen, aber der CLR weiß, was damit zu tun ist.

Abschnitt 8.9.3 von ECMA-335 Teil I spricht darüber:

Delegaten sind das objektorientierte Äquivalent von Funktionszeigern. Im Gegensatz zu Funktionszeigern sind Delegaten objektorientiert, typsicher und sicher. Delegaten werden erstellt, indem eine Klasse definiert wird, die von dem Basistyp System.Delegate abgeleitet ist (siehe Teil IV). Jeder Delegattyp muss eine Methode mit dem Namen Invoke mit entsprechenden Parametern bereitstellen, und jede Instanz eines Delegaten leitet Aufrufe seiner Invoke-Methode an eine oder mehrere kompatible statische oder Instanzmethoden auf bestimmten Objekten weiter. Die Objekte und Methoden, an die delegiert wird, werden bei Erstellung der Delegatinstanz ausgewählt.

Zusätzlich zu einem Instanzkonstruktor und einer Invoke-Methode können Delegaten optional zwei weitere Methoden haben: BeginInvoke und EndInvoke. Diese werden für asynchrone Aufrufe verwendet.

Obwohl Delegaten größtenteils einfach eine weitere Art von benutzerdefinierter Klasse zu sein scheinen, sind sie eng kontrolliert. Die Implementierungen der Methoden werden vom VES bereitgestellt, nicht vom Benutzercode. Die einzigen zusätzlichen Elemente, die auf Delegattypen definiert werden können, sind statische oder Instanzmethoden.

(VES ist das Virtuelle Ausführungssystem; der CLR ist Microsofts Implementierung des VES.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X