Was sind nützliche Definitionen für die üblichen Methoden zum Übergeben einer Methode oder Funktion als Daten, wie zum Beispiel:
Funktionszeigern 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 können Sie Funktionen wie Variablen übergeben. Methoden (lose) bedeuten Funktionen. Das bedeutet im Grunde erstklassige Funktionen . Im einfachsten Sinne bedeutet dies, dass Funktionen als "First-Class-Bürger" behandelt werden, wie Variablen. In den alten Tagen (C / C ++), weil wir eine Funktion nicht direkt weitergeben können und wir auf Workarounds wie Funktionszeiger zurückgreifen mussten, sagten wir, dass Funktionen keine erstklassigen Bürger seien.
Delegates ist C #'s Antwort auf erstklassige Methoden. Delegierte sind etwas leistungsfähiger, weil es closures beinhaltet, betrachten Sie das folgende Code-Snippet:
%Vor% Beachten Sie, dass bar
auf die lokale Variable a
verweisen kann, da Delegierte Closures verwenden können.
Closures kann auf den ersten Blick 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 für foo
war, aber nicht bar
, was eine andere Funktion ist.
Dynamischer Proxy ist die Ausnahme. Es gehört nicht zu diesen Artikeln. Erklären erfordert es einige sehr lange Texte. Es stammt aus dem berühmten Proxy-Muster . Das Problem mit Proxy Pattern war, dass die Proxy-Klasse die gleiche Schnittstelle wie der Subject implementieren muss. Dynamischer Proxy bedeutet im Grunde genommen, dass die Methode des Subjekts mithilfe eines reflektiven Ansatzes entdeckt wird, so dass das ProxyPattern von der Bindung an die Schnittstelle des Subjekts befreit werden kann.
nur diejenigen, die ich kenne:
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 zeigt auf beides - ein Objekt und seine Methode). Es gibt auch eine Möglichkeit, mehrere Voicedelegate-Instanzen zu einer zu kombinieren.
Tags und Links language-agnostic closures function-pointers delegates dynamic-proxy