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

Are instance methods duplicated in memory for each object?

为了更清楚地说明我的问题,如果您创建一个特定 class 的数组:例如,

ExampleClass[] test = new ExampleClass[5]; 

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

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

此方法 Table 由该对象的每个实例指向。所以每个实例不会复制该类型定义的所有方法,而是指向这个方法table结构并引用

例如:

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

这个 MyClass 将有一个方法 table 包括:

  • 我的静态方法
  • 我的实例方法
  • 处置
  • 以及其他派生自System.Object
  • 的虚方法

看看漂亮的方法图table:

您可以查看有关方法的整篇文章 tables here