virtuales propiedad new metodos metodo method abstractos c# .net virtual vtable

c# - propiedad - Tablas de métodos virtuales



override c# (3)

La "tabla de funciones virtuales" o "tabla de métodos virtuales" es una lista de punteros de métodos que tiene cada clase. Contiene punteros a los métodos virtuales en la clase.

Cada instancia de una clase tiene un puntero a la tabla, que se usa cuando se llama a un método virtual desde la instancia. Esto se debe a que una llamada a un método virtual debe llamar al método asociado con la clase del objeto real, no a la clase de la referencia al objeto.

Si, por ejemplo, tiene una referencia de objeto a una cadena:

object obj = "asdf";

y llamar al método virtual ToString:

string text = obj.ToString();

utilizará el método String.ToString, no el método Object.ToString. Está utilizando la tabla de método virtual de la clase String (a la que apunta el puntero en la instancia de cadena), no la tabla de método virtual de la clase Object.

Cuando se discuten clases selladas, el término "tabla de función virtual" se menciona con bastante frecuencia. ¿Qué es exactamente esto? Leí sobre una tabla de métodos hace un tiempo (no recuerdo el propósito del propósito de esto) y una búsqueda en Google aquí muestra los resultados relacionados con C ++.

Gracias


La definición de la Tabla de funciones virtuales (a menudo llamada vtable) es la misma en C # y C ++. Es una tabla de búsqueda que se utiliza internamente por el tiempo de ejecución para lograr los comportamientos polimórficos del método abstracto / virtual / de reemplazo.

En forma simple, puede imaginar que una clase base con un método virtual A tendrá un vtable que contenga methodA. Cuando la clase derivada reemplaza a methodA, vtable para methodA se hereda de la clase primaria pero ahora apunta a methodA en la clase derivada en lugar de a la clase primaria.


La tabla de funciones virtuales de C # funciona básicamente igual que la de C ++, por lo que cualquier recurso que describa cómo funciona la tabla de funciones virtuales de C ++ debería ayudarlo bastante bien con la de C # uno también.

Por ejemplo, la descripción de Wikipedia no es mala.