Antwort

13

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.

0

nur die, die ich kenne:

  • Zeiger Funktion: nur, dass ein Zeiger auf ein Stück Code. Sie springen zu ihm, es führt aus. typisierte Sprachen können einige Parameterübergabekonventionen erzwingen (d. h. C-Deklarationen)
  • Verschlüsse: eine Funktion mit einem paarweise gepaarten Zustand. am natürlichsten in lexikalisch beschränkten Sprachen geschrieben (d. h. Scheme, JavaScript, Lua). Mehrere Closures können den gleichen Status (oder einen Teil davon) teilen, was eine einfache Möglichkeit zur Implementierung von OOP darstellt.
  • First-Class-Methoden: ein Abschluss, der aus einer Objektinstanz und einer Methode erstellt wird. Einige Sprachen mit Closures und einem nativen OOP (Python, JavaScript) können automatisch Closures erstellen.
0

Closure ist ein Programmiersprachenkonzept. Delegate ist seine Umsetzung in MS.NET.

Ein Delegat in MS.NET ist ein stark typisierter Zeiger auf die Methode eines Objekts (eine Delegat-Instanz verweist auf beides - ein Objekt und seine Methode). Es gibt auch eine Möglichkeit, mehrere void-Delegat-Instanzen zu einer zu kombinieren.