2009-02-10 6 views

Répondre

15

No.

dynamique de répartition - Le groupe de procédé réelle/signature/chaîne de substitution est lié à la compilation. La méthode appelée dépend du type d'exécution réel de l'objet mais aucune interprétation réelle ne se produit. Ce sera toujours une version de la méthode liée statiquement.

Voici un exemple en C#.

class Foo { 
    public override string ToString() { return "foo's ToString"; } 
} 

void Example(object p1) { 
    p1.ToString(); 
} 

L'appel à p1.ToString est un exemple de répartition dynamique. Le code se lie statiquement à la méthode ToString. Cependant, il s'agit d'une méthode virtuelle, donc le .ToString() appelé ne sera pas connu avant l'exécution, mais il est garanti pour appeler une méthode .ToString(). Ce sera le ToString du type réel de p1. Donc si p1 est une instance de Foo, Foo :: ToString sera appelée. Dynamic Liaison - La méthode actuelle est liée à l'exécution et est sujette à interprétation en fonction de la sémantique du langage ou du cadre de réflexion. Cela peut échouer en raison d'une incapacité à lier.

Exemple:

void CallBar(object o) { 
    var method = o.GetType().GetMethod("Bar"); 
    method.Invoke(new object[] {o}); 
} 

Dans ce cas, nous allons tenter d'invoquer la méthode "Bar" sur l'objet en question. Le mot clé tente. Il est tout à fait possible que "Bar" n'existe pas sur l'objet. Mais ceci est déterminé au moment de l'exécution en liant dynamiquement à la méthode "Bar". La chose qu'ils ont le plus en commun, c'est que les deux opérations (probablement) dépendent du type d'exécution de l'objet.

EDIT

Ajout de quelques exemples à la demande de l'OP

+0

Je ne suis pas sûr de suivre ce que vous dites. Je pense que cela aiderait si vous donniez une définition précise de ce que vous entendez par les termes liaison et envoi. (N'expédie pas l'invocation de méthode, auquel cas à un moment donné de la liaison dynamique, nous obtenons une instruction de saut/appel qui est un envoi?) –

+0

Ajout d'exemples pour aider à clarifier cela – JaredPar

+0

Selon ce document: http : //citeseerx.ist.psu.edu/viewdoc/summary? doi = 10.1.1.33.4292 "Le mécanisme implémentant la liaison dynamique est appelé répartition dynamique." Selon ce JaredPar est faux. – cvogt

3

envoi dynamique ou des moyens de liaison dynamiques lors de l'appel d'une méthode, le choix de la mise en œuvre de la méthode réelle d'exécuter survient pendant que le programme est en cours d'exécution , parce que statiquement il n'y a pas assez d'informations disponibles. Il sera basé sur le nom de la méthode, le type de récepteur réel (sous-type polymorphisme), et/ou les types d'arguments réels (surcharge), ou encore plus de correspondance de modèle fantaisie. La liaison dynamique est, selon Wikipedia, une forme de répartition dynamique dans les langages OO où la méthode à invoquer est basée sur le nom de l'opération et le récepteur réel au moment de l'exécution.

This article introduit une liaison dynamique de type statique (liaison dynamique assistée par le système de type statique) et une liaison dynamique entièrement exécutée au moment de l'exécution. Il traite également la surcharge comme une forme de liaison dynamique.

Je suis sûr que vous pouvez trouver beaucoup d'autres articles qui parlent de répartition dynamique ou de liaison. Pour autant que je sache, la terminologie n'est pas fixe et «surchargée». Il est préférable de décrire ce que se passe réellement à l'exécution (le processus exact de la façon dont une méthode particulière est choisie) au lieu d'essayer de définir correctement l'un ou l'autre de ces deux termes.