虚拟方法表

发布于 2024-08-24 16:52:56 字数 103 浏览 11 评论 0原文

在讨论密封类时,经常提到术语“虚函数表”。这到底是什么?我不久前读到了一个方法表(我也不记得这个的目的),这里的 google/search 带来了 C++ 相关的结果。

谢谢

When discussing sealed classes, the term "virtual function table" is mentioned quite frequently. What exactly is this? I read about a method table a while ago (I don't remember the purpose of the purpose of this either) and a google/search on here brings up C++ related results.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

妄断弥空 2024-08-31 16:52:56

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

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

例如,如果您有一个对 string: 的对象引用,

object obj = "asdf";

并调用虚拟方法 ToString: ,

string text = obj.ToString();

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

The "virtual function table" or "virtual method table" is a list of method pointers that each class has. It contains pointers to the virtual methods in the class.

Each instance of a class has a pointer to the table, which is used when you call a virtual method from the instance. This is because a call to a virtual method should call the method associated with the class of the actual object, not the class of the reference to the object.

If you for example have an object reference to a string:

object obj = "asdf";

and call the virtual method ToString:

string text = obj.ToString();

it will use the String.ToString method, not the Object.ToString method. It's using the virtual method table of the String class (which the pointer in the string instance is pointing to), not the virtual method table of the Object class.

萌化 2024-08-31 16:52:56

C# 虚拟函数表的工作原理与 C++ 基本相同,因此任何描述 C++ 虚拟函数表如何工作的资源都应该可以帮助您很好地使用 C# 虚拟函数表。

例如,维基百科的描述还不错。

The C# virtual function table works basically the same as the C++ one, so any resources which describe how the C++ virtual function table works should help you pretty well with the C# one as well.

For example, Wikipedia's description is not bad.

浮生未歇 2024-08-31 16:52:56

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

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

The definition for Virtual Function Table (often call vtable) is the same in C# and C++. It is an lookup table use internally by the runtime to achieve the polymorphic behaviors of abstract/virtual/override method.

In simple you can imagine a base class with a virtual methodA will have a vtable that contains methodA. When derived class override methodA, the vtable for methodA inherits from the parent class but will now points to the methodA in the derived class rather than parent class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文