Virtual和Override在幕后做了什么

Ath*_*han 7 c# virtual overriding

我刚刚了解Virtual和Override用于(我找不到这么长时间使用).现在我在Factory Patterns中使用它们.所以我的问题是Virtual和Override在幕后做了什么?我愿意进入IL和机器代码的东西.

par*_*cle 15

我不能给你任何关于如何在IL中完成的见解,但基本理论很简单.

当编译器看到虚拟方法声明时,不是将该方法附加到类,而是将其添加到该类的所谓的vtable(虚方法表),该类保存指向函数的指针.

现在因为vtable它是类的一部分,所以它由子类继承,因此虚拟方法也是继承的.现在是覆盖位.当编译器在方法声明中看到覆盖时,它会查找vtable,找到要覆盖的方法并更改函数指针,使其指向新的定义.

因此,您既可以从父类继承方法,也可以在子类中更改它们的定义.

有关更多信息,请参阅虚拟方法表上的Wikipedia文章.