c# - C#如何创建类的实例?

标签 c# .net

public class MyClass
{
    int i = 0;
    string str = "here";
    MyStruct mystruct;
    B b;
    ArrayList myList = new ArrayList(10);

    public MyClass()
    {
    }
    ....
}

public struct MyStruct
{
    public int i;
    public float f;
}

public class B
{
    ...
}

想了解一个类的实例是如何在后台创建的。当这个声明

 MyClass myClass = new MyClass();

被评估。后台会发生什么?我的以下陈述是否正确(对于 32 位操作系统机器)?

  1. 将创建一个内存空间并将其引用为myClass
  2. 在上述内存空间中,4个字节用于int i的值;
  3. 在上述内存空间中,4个字节用于string str的引用; str 的实际值存储在其他位置(在哪里?)
  4. 在上述内存空间中,8个字节用于MyStruct mystruct的值(因为MyStruct是8个字节);
  5. 在上述内存空间中,4个字节用于B b对象的引用; b 对象的内存将在实例化时分配到其他地方;
  6. 在上述内存空间中,4个字节用于ArrayList myList的引用; ArrayList myList 的实际内存空间在其他地方分配并在此处引用为 myList;
  7. 上述内存空间的另外 4 或 8 个字节用于对象元数据;
  8. ...;

最佳答案

你已经有了基本的想法。除了您所包含的内容之外,实际的具体细节是特定于实现的。但是,对于您的几点意见:

3) 实际的字符串通常存储在它自己的内存空间中,就像任何其他类一样。但是,由于您在这种情况下使用的是字符串文字,因此它很可能位于字符串实习生池中,(我相信)它存储在大对象堆中。有关字符串实习的详细信息,请参阅 String.Intern . (如果您动态分配字符串,而不是使用文字,则该字符串将存储在应用程序的正常托管堆中。)

关于c# - C#如何创建类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3373278/

相关文章:

c# - 如何找出导致 SocketException、UdpClient 的端点

c# - IDeserializationCallback 与 OnDeserializedAttribute

.net - 为什么我的客户端证书没有包含在 TLS 握手中?

c# - SignalR:加载集线器时出错

c# - DataGridView ToolTipText 未显示

c# - 有什么方法可以使 yield created Iterator 在出现异常时继续到下一个项目?

c# - 有什么方法可以将 MS Office Smooth Typing 集成到 C# 应用程序中吗?

c# - 命名空间范围

c# - 数据没有从数据库中删除

c# - OpenTK 中的 Sprite Sheet 动画