首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚方法表

虚方法表
EN

Stack Overflow用户
提问于 2010-03-10 07:43:14
回答 3查看 22.2K关注 0票数 26

在讨论密封类时,术语“虚函数表”经常被提及。这到底是什么?我前段时间读到了一个方法表(我也不记得这么做的目的了),在这里进行谷歌/搜索就会出现与C++相关的结果。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-10 07:46:46

C#虚拟函数表的工作原理与C++虚拟函数表基本相同,因此,任何描述C++虚拟函数表工作方式的参考资料都应该能很好地帮助您使用C#虚拟函数表。

例如,Wikipedia's description不是很差。

票数 7
EN

Stack Overflow用户

发布于 2010-03-10 07:50:51

“虚函数表”或“虚方法表”是每个类拥有的方法指针的列表。它包含指向类中虚方法的指针。

类的每个实例都有一个指向该表的指针,当您从该实例调用虚方法时会使用该指针。这是因为对虚方法的调用应该调用与实际对象的类相关联的方法,而不是调用对对象的引用的类。

例如,如果您有一个对字符串的对象引用:

代码语言:javascript
复制
object obj = "asdf";

并调用虚拟方法ToString:

代码语言:javascript
复制
string text = obj.ToString();

它将使用String.ToString方法,而不是Object.ToString方法。它使用的是String类的虚拟方法表( string实例中的指针指向该表),而不是Object类的虚拟方法表。

票数 32
EN

Stack Overflow用户

发布于 2010-03-10 07:49:25

虚函数表(通常称为vtable)的定义在C#和C++中是相同的。它是运行时内部使用的查找表,用于实现抽象/虚拟/覆盖方法的多态行为。

简单地说,您可以想象一个具有虚拟methodA的基类将拥有一个包含methodA的vtable。当派生类重写methodA时,methodA的vtable继承父类,但现在将指向派生类中的methodA,而不是父类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2413483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档