2016-08-17 80 views
0

我发现一个类型的方法表包含: (1)在该类型中新定义的方法。 (2)在其基本类型中定义的虚拟方法。为什么方法表只包含基类的虚方法?

我完全可以理解,对于其他语言(例如C++)中的虚拟表格,只有虚拟方法需要存储在表格中。但是对于C#,由于方法表并不完全等于虚拟表,因为在该类型的方法表中存在在类型中新定义的非虚方法。因此我想知道为什么C#中的方法表是这样设计的?为什么非虚拟基类型的方法不存储,而类型本身的类型存储。

感谢。

+0

它有什么问题吗?为什么你想要在表中使用非虚拟方法?为了什么?问题不是学术问题(例如,来自实施他的'C#'编译器的人)或无意义的问题(例如,一个人问“为什么?”,因为他可以)。 – Sinatr

+3

因为它们已经存在于基类方法表中,所以不需要重复它们。虽然CLR可以自己解决这个问题,但很少需要编译器已经发出对基类方法的调用。但当然它不能用于虚拟方法。方法绑定是一个很大的故事,特别是接口实现方法绑定的方式非常复杂。怀疑有人会写这本手册。 –

回答

-1

因为vtable用于虚拟方法。非虚拟方法可以静态解析,因此不需要查找表。

+2

方法表!= vtable,它当然包含.NET中的非虚拟方法。 –

相关问题