gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:09:53 25 4
gpt4 key购买 nike

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

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的虚方法

看看方法表的漂亮图:

Method Table Diagram

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

关于c# - 每个对象的实例方法是否在内存中重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27751624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com