实例方法是否在每个对象的内存中重复?

为了更清楚我的问题,如果你创建一个特定类的数组:例如,

ExampleClass[] test = new ExampleClass[5]; 

我知道五个ExampleClass实例会为每个类创建每个变量的副本,但是在内存中重复5次的方法/函数,还是每个测试只指向同一个单类代码库? 如果它为每个类重复,那只会浪费内存。

加载到AppDomain中的每个类型都将具有一个方法表结构,该结构包含类型定义的每个方法,以及从父级(通常为Object )派生的虚拟方法以及由任何已实现的接口定义的方法。

该方法表由该对象的每个实例指向。 因此,每个实例都不会复制该类型定义的所有方法,但会使用引用指向此方法表结构

例如:

  public class MyClass : IDisposable { private static void MyStaticMethod() { // .... } public void MyInstanceMethod() { // .... } public void Dispose() { throw new NotImplementedException(); } } 

这个MyClass将有一个方法表,包括:

  • MyStaticMethod
  • MyInstanceMethod
  • 部署
  • 以及从System.Object派生的其他虚拟方法

看看方法表的漂亮图表:

方法表图

您可以在此处查看有关方法表的整篇文章