Funktionszeiger können Sie Funktionen wie Variablen übergeben. Funktionszeiger ist im Grunde eine Legacy-Methode, um Funktionen in Sprachen zu übergeben, die keine erstklassigen Methoden wie C/C++ unterstützen.
Erstklassige Methoden Grundsätzlich bedeutet, dass Sie Funktionen wie Variablen übergeben können. Methoden (lose) bedeuten Funktionen. Das bedeutet also First Class Funktionen. Im einfachsten Sinne bedeutet dies, dass Funktionen als "First-Class-Bürger" behandelt werden, wie Variablen. In den alten Zeiten (C/C++), weil wir eine Funktion nicht direkt weitergeben können und wir auf Workarounds wie Funktionszeiger zurückgreifen mussten, sagten wir, Funktionen seien keine erstklassigen Bürger.
Delegierte ist C# 's Antwort auf erstklassige Methoden. Die Delegierten sind etwas leistungsfähiger, da es sich um Verschlüsse Betrachten Sie den folgenden Code-Schnipsel:
void foo(int a)
{
void bar() { writefln(a); }
call(&bar);
}
void call(void delegate() dg ) { dg(); }
int main(char[][] args) {
foo(100);
}
Beachten Sie, dass bar
die lokale Variable verweisen können a
weil Delegierten Verschlüsse verwenden können.
Verschlüsse kann auf den ersten sehr verwirrend sein. Aber die Definition des faulen Mannes kann wirklich einfach sein. Es bedeutet im Grunde, dass eine Variable in der vom Menschen erwarteten Weise verfügbar sein kann. Mit anderen Worten, eine Variable kann an Stellen referenziert werden, wo sie aussehen, als wären sie vorhanden, indem sie die Struktur des Quellcodes lesen. Betrachten wir zum Beispiel das obige Codefragment.Wenn wir keine Schließung hätten, wäre bar
nicht in der Lage, a
zu referenzieren, weil a
nur lokal zu foo
war, aber nicht bar
, was eine andere Funktion ist.
Dynamischer Proxy ist die ungerade out. Es gehört nicht zu diesen Artikeln. Erklären erfordert es einige sehr lange Texte. Es stammt aus dem berühmten Proxy Pattern. Das Problem mit Proxy Pattern war, dass die Proxy-Klasse die gleiche Schnittstelle wie der Subject implementieren muss. Dynamischer Proxy bedeutet im Grunde genommen die Verwendung eines reflektiven Ansatzes, um die Methode des Subjekts zu erkennen, so dass das ProxyPattern von der Bindung an die Schnittstelle des Subjekts befreit werden kann.