gpt4 book ai didi

c# - Virtual 和 Override 在幕后做了什么

转载 作者:太空狗 更新时间:2023-10-29 19:52:15 26 4
gpt4 key购买 nike

我才明白 Virtual 和 Override 是用来干什么的(这么久都找不到用处)。现在我在工厂模式中使用它们。所以我的问题是 Virtual 和 Override 在幕后做了什么?我愿意研究 IL 和机器代码。

最佳答案

关于如何在 IL 中完成它,我无法提供任何见解,但基本理论很简单。

当编译器看到一个virtual 方法声明时,它不会将该方法附加到类中,而是将其添加到所谓的vtable 该类的(虚拟方法表),其中包含指向函数的指针。

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

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

有关更多信息,请参阅关于 Virtual Method Table 的维基百科文章.

关于c# - Virtual 和 Override 在幕后做了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1310312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com