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

时间:2015-01-03 04:09:47

标签: c# class oop

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

ExampleClass[] test = new ExampleClass[5]; 

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

1 个答案:

答案 0 :(得分:10)

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

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

例如:

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

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

  • MyStaticMethod
  • MyInstanceMethod
  • 处置
  • 从System.Object
  • 派生的其他虚拟方法

看看方法表的漂亮图表:

Method Table Diagram

您可以查看有关方法表here

的整篇文章