在讨论密封类时,术语“虚函数表”经常被提及。这到底是什么?我前段时间读到了一个方法表(我也不记得这么做的目的了),在这里进行谷歌/搜索就会出现与C++相关的结果。
谢谢
发布于 2010-03-10 07:46:46
C#虚拟函数表的工作原理与C++虚拟函数表基本相同,因此,任何描述C++虚拟函数表工作方式的参考资料都应该能很好地帮助您使用C#虚拟函数表。
例如,Wikipedia's description不是很差。
发布于 2010-03-10 07:50:51
“虚函数表”或“虚方法表”是每个类拥有的方法指针的列表。它包含指向类中虚方法的指针。
类的每个实例都有一个指向该表的指针,当您从该实例调用虚方法时会使用该指针。这是因为对虚方法的调用应该调用与实际对象的类相关联的方法,而不是调用对对象的引用的类。
例如,如果您有一个对字符串的对象引用:
object obj = "asdf";并调用虚拟方法ToString:
string text = obj.ToString();它将使用String.ToString方法,而不是Object.ToString方法。它使用的是String类的虚拟方法表( string实例中的指针指向该表),而不是Object类的虚拟方法表。
发布于 2010-03-10 07:49:25
虚函数表(通常称为vtable)的定义在C#和C++中是相同的。它是运行时内部使用的查找表,用于实现抽象/虚拟/覆盖方法的多态行为。
简单地说,您可以想象一个具有虚拟methodA的基类将拥有一个包含methodA的vtable。当派生类重写methodA时,methodA的vtable继承父类,但现在将指向派生类中的methodA,而不是父类。
https://stackoverflow.com/questions/2413483
复制相似问题