为了更清楚地说明我的问题,如果您创建一个特定类的数组:例如,
ExampleClass[] test = new ExampleClass[5];
我知道五个 ExampleClass
实例会为每个类创建每个变量的副本,但是方法/函数在内存中重复了 5 次,还是每个测试都指向同一个单类代码库?如果它为每个类(class)重复,那只会浪费内存。
最佳答案
加载到 AppDomain 中的每个类型都将有一个方法表结构,该结构包含该类型定义的每个方法,以及从父类(通常是Object)派生的虚方法和由任何已实现的接口(interface)定义的方法。
该方法表由该对象的每个实例指向。所以每个实例不会复制该类型定义的所有方法,而是通过引用指向这个方法表结构。
例如:
public class MyClass : IDisposable
{
private static void MyStaticMethod()
{
// ....
}
public void MyInstanceMethod()
{
// ....
}
public void Dispose()
{
throw new NotImplementedException();
}
}
这个 MyClass 将有一个方法表,包括:
- 我的静态方法
- 我的实例方法
- 处置
- 以及其他派生自System.Object的虚方法
看看方法表的漂亮图:
您可以查看有关方法表的整篇文章here
关于c# - 每个对象的实例方法是否在内存中重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27751624/