Expliquant virtuel envoi à quelqu'un, c'est simple: chaque objet est un pointeur vers une table dans le cadre de ses données. Il y a N méthodes virtuelles de la classe. Chaque appel à une méthode particulière, je l'index de l'objet lorsqu'il arrive et appelle la ith méthode dans le tableau. Toute classe qui implémente la méthode X() le code de la méthode X() dans le même ith index.
Mais alors nous obtenons des interfaces. Et interfaces nécessitent une sorte de contorsion parce que deux non-héritant des classes qui implémentent la même interface les fonctions virtuelles dans les différents index de la table.
J'ai cherché sur Internet, et il y a beaucoup de discussions que je peux trouver sur la façon de l'interface expédition peut être mis en œuvre. Il existe deux grandes catégories: a) une sorte de table de hachage de regarder sur l'objet à trouver la bonne expédition table b) lorsque l'objet est jeté à l'interface, un nouveau pointeur est créé points pour les mêmes données, mais à un autre vtable.
Mais en dépit de beaucoup d'informations sur la façon dont il peut travailler, je ne trouve rien sur la manière dont la .NET moteur d'exécution fait l'implémente.
Quelqu'un sait-il d'un document qui décrit l'arithmétique des pointeurs qui se passe à un callvirt l'instruction lorsque le type d'objet est une interface?