2009-02-10 12 views

Respuesta

15

No.

dinámico de Despacho - El/firma/cadena override grupo método real está obligado en tiempo de compilación. El método llamado depende del tipo de tiempo de ejecución real del objeto, pero no se produce una interpretación real. Seguirá siendo una versión del método estáticamente vinculado.

Aquí hay un ejemplo en C#.

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

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

La llamada a p1.ToString es un ejemplo de despacho dinámico. El código se une de forma estática al método ToString. Sin embargo, es un método virtual, por lo que el llamado .ToString() real no se conocerá hasta el tiempo de ejecución, pero es el garantizado para llamar a un método .ToString(). Será el ToString del tipo real de p1. Entonces, si p1 es realmente una instancia de Foo, se llamará a Foo :: ToString.

Enlace dinámico: el método real está vinculado en el tiempo de ejecución y está sujeto a interpretaciones basadas en la semántica del lenguaje o marco de reflexión. Esto puede fallar debido a la imposibilidad de vincular.

Ejemplo:

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

En este caso, estamos tratando de invocar el método "bar" en el objeto en cuestión. La palabra clave está intentando. Es completamente posible que "Bar" no exista en el objeto. Pero esto se determina en tiempo de ejecución vinculando dinámicamente al método "Bar".

Lo que tienen más en común es que ambas operaciones (probablemente) dependen del tipo de tiempo de ejecución del objeto.

EDITAR

añadido algunos ejemplos más, a petición de la OP

+0

No estoy seguro de seguir lo que dices. Creo que ayudaría si dieras una definición precisa de lo que quieres decir con los términos de enlace y envío. (No despachar media invocación de métodos, en cuyo caso, en algún momento de enlace dinámico que terminamos con una instrucción de salto/llamada que es un despacho ??) –

+0

añadido algunos ejemplos para ayudar a aclarar esto – JaredPar

+0

De acuerdo con este documento: http : //citeseerx.ist.psu.edu/viewdoc/summary? doi = 10.1.1.33.4292 "El mecanismo que implementa el enlace dinámico se llama despacho dinámico." De acuerdo con esto, JaredPar está equivocado. – cvogt

3

Asignación dinámica o medios de unión dinámicas que cuando se llama a un método, la elección de la implementación del método real para ejecutar sucede mientras el programa se está ejecutando , porque estáticamente no hay suficiente información disponible. Se basará en el nombre del método, el tipo de receptor real (polimorfismo de subtipo) y/o los tipos de argumentos reales (sobrecarga), o incluso una coincidencia de patrones más sofisticada.

La vinculación dinámica es, según Wikipedia, una forma de envío dinámico en los lenguajes de OO donde el método real para invocar se basa en el nombre de la operación y el receptor real en tiempo de ejecución.

This article introduce un enlace dinámico de tipo estático (enlace dinámico ayudado por el sistema de tipo estático) y un enlace dinámico totalmente realizado en tiempo de ejecución. Trata la sobrecarga como una forma de enlace dinámico también.

Estoy seguro de que puede encontrar muchos otros artículos que hablan sobre el envío dinámico o el enlace. Por lo que puedo decir, la terminología no es fija y está "sobrecargada". Lo mejor es describir lo que realmente sucede en el tiempo de ejecución (el proceso exacto de cómo se elige un método en particular) en lugar de tratar de definir correctamente cualquiera de estos dos términos.

Cuestiones relacionadas