I puntatori di funzione consentono di passare funzioni come variabili. Il puntatore a funzione è fondamentalmente un metodo legacy per passare la funzione in lingue che non supportano metodi di prima classe, come C/C++.
Metodi di prima classe Fondamentalmente significa che è possibile passare funzioni come variabili. I metodi (liberamente) significano funzioni. Quindi questo significa fondamentalmente funzioni di prima classe. In termini più semplici, significa che le funzioni sono trattate come "cittadini di prima classe", come le variabili. Ai vecchi tempi (C/C++), perché non possiamo passare direttamente una funzione in giro, e abbiamo dovuto ricorrere a soluzioni alternative come i puntatori di funzione, abbiamo detto che le funzioni non erano cittadini di prima classe.
Delegati è la risposta di C# ai metodi di prima classe. I delegati sono un po 'più potente perché coinvolge chiusure, si consideri il seguente frammento di codice:
void foo(int a)
{
void bar() { writefln(a); }
call(&bar);
}
void call(void delegate() dg ) { dg(); }
int main(char[][] args) {
foo(100);
}
noti che bar
può fare riferimento alla variabile locale a
perché i delegati possono utilizzare le chiusure.
Le chiusure possono essere molto confuse all'inizio. Ma la definizione del pigro-uomo può essere davvero semplice. Significa fondamentalmente che una variabile può essere disponibile nel modo atteso dall'uomo. In altre parole, una variabile può essere referenziata in luoghi dove sembrano essere presenti, leggendo la struttura del codice sorgente. Ad esempio, guardando il frammento di codice sopra.Se non avessimo la chiusura, bar
non sarebbe in grado di fare riferimento a a
perché a
era solo locale a foo
, ma non a bar
, che è un'altra funzione.
Dynamic Proxy è uno strano fuori. Non appartiene a questi articoli. Spiegarlo richiede un testo molto lungo. Deriva dal famoso Proxy Pattern. Il problema con Proxy Pattern era che la classe Proxy doveva implementare la stessa interfaccia del soggetto. Dynamic Proxy fondamentalmente significa utilizzare un approccio riflessivo per scoprire il metodo del soggetto in modo che il ProxyPattern possa essere liberato dall'essere collegato all'interfaccia del soggetto.