Répondre

13

Les pointeurs de fonction vous permettent de passer des fonctions autour de variables similaires. Le pointeur de fonction est fondamentalement la méthode héritée pour passer la fonction dans les langages qui ne supportent pas les méthodes de première classe, telles que C/C++.

Méthodes de première classe Fondamentalement signifie que vous pouvez passer des fonctions autour de variables similaires. Méthodes (vaguement) signifient des fonctions. Donc, cela signifie essentiellement fonctions de première classe. En termes simples, cela signifie que les fonctions sont traitées comme des «citoyens de première classe», comme des variables. Dans l'ancien temps (C/C++), parce que nous ne pouvons pas passer directement une fonction autour, et nous avons dû recourir à des solutions de contournement comme des pointeurs de fonction, nous avons dit que les fonctions n'étaient pas des citoyens de première classe.

Délégués est la réponse de C# aux méthodes de première classe. Les délégués sont un peu plus puissant, car il implique la fermeture , pensez à l'extrait de code suivant:

void foo(int a) 
{ 
    void bar() { writefln(a); } 
    call(&bar); 
} 

void call(void delegate() dg ) { dg(); } 
int main(char[][] args) { 
    foo(100); 
} 

Notez que bar peut faire référence à la variable locale a parce que les délégués peuvent utiliser des fermetures.

Fermetures peut être très déroutant au premier abord. Mais la définition de l'homme paresseux peut être très simple. Cela signifie essentiellement qu'une variable peut être disponible de la manière attendue par l'homme. En d'autres termes, une variable peut être référencée dans des endroits où elle semble être présente, en lisant la structure du code source. Par exemple, en regardant le fragment de code ci-dessus.Si nous n'avions pas de fermeture, bar ne serait pas en mesure de référencer a car a était uniquement local à foo, mais pas bar, ce qui est une autre fonction.

Le proxy dynamique correspond à la sortie impaire. Il n'appartient pas à ces articles. L'expliquer nécessite un très long texte. Il provient du célèbre Proxy Pattern. Le problème avec Proxy Pattern était que la classe Proxy devait implémenter la même interface que le sujet. Dynamic Proxy signifie essentiellement utiliser une approche réfléchie pour découvrir la méthode du sujet afin que le ProxyPattern puisse être libéré de l'interface du sujet.

0

seulement ceux que je connais sur:

  • pointeurs de fonction: il suffit que, un pointeur sur un morceau de code. vous sautez dessus, il s'exécute. les langues typées peuvent appliquer une convention de passage de paramètre (c'est-à-dire des déclarations C)
  • Fermetures: une fonction avec un certain état apparié. le plus naturellement écrit dans des langages à portée lexicale (c'est-à-dire Scheme, JavaScript, Lua). plusieurs fermetures peuvent partager le même état (ou une partie de celui-ci), ce qui en fait un moyen facile de mettre en œuvre la POO.
  • Méthodes de première classe: fermeture créée à partir d'une instance d'objet et d'une méthode. Certaines langues avec des fermetures et un POO natif (Python, JavaScript) peuvent créer des fermetures automatiquement.
0

La fermeture est un concept de langage de programmation. Le délégué est sa réalisation dans MS.NET.

Un délégué dans MS.NET est un pointeur fortement typé vers la méthode d'un objet (une instance de délégué pointe à la fois - un objet et sa méthode). Il existe également un moyen de combiner plusieurs instances de délégués vides en une seule.

Questions connexes