risposta

13

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.

0

solo quelli che conosco:

  • puntatori a funzione: proprio questo, un puntatore a un pezzo di codice. ti salti sopra, si esegue. le lingue tipizzate possono applicare alcune convenzioni di passaggio dei parametri (ad esempio dichiarazioni C)
  • Chiusure: una funzione con uno stato abbinato. scritto in modo più naturale in linguaggi lessicali (ad es. Schema, JavaScript, Lua). diverse chiusure possono condividere lo stesso stato (o parte di esso), rendendolo un modo semplice per implementare OOP.
  • Metodi di prima classe: una chiusura creata da un'istanza di oggetto e un metodo. alcune lingue con entrambe le chiusure e un OOP nativo (Python, JavaScript) possono creare automaticamente chiusure.
0

La chiusura è un concetto di linguaggio di programmazione. Delegato è la sua realizzazione in MS.NET.

Un delegato in MS.NET è un puntatore fortemente digitato sul metodo di un oggetto (un'istanza delegata punta a entrambi, un oggetto e il relativo metodo). C'è anche un modo per combinare diverse istanze delegate void in una.