Ath*_*han 7 c# virtual overriding
我刚刚了解Virtual和Override用于(我找不到这么长时间使用).现在我在Factory Patterns中使用它们.所以我的问题是Virtual和Override在幕后做了什么?我愿意进入IL和机器代码的东西.
par*_*cle 15
我不能给你任何关于如何在IL中完成的见解,但基本理论很简单.
当编译器看到虚拟方法声明时,不是将该方法附加到类,而是将其添加到该类的所谓的vtable(虚方法表),该类保存指向函数的指针.
vtable
现在因为vtable它是类的一部分,所以它由子类继承,因此虚拟方法也是继承的.现在是覆盖位.当编译器在方法声明中看到覆盖时,它会查找vtable,找到要覆盖的方法并更改函数指针,使其指向新的定义.
因此,您既可以从父类继承方法,也可以在子类中更改它们的定义.
有关更多信息,请参阅虚拟方法表上的Wikipedia文章.
归档时间:
16 年,5 月 前
查看次数:
1018 次
最近记录: