常规类静态类的内存分配静态方法instanve方法和堆栈和堆栈上的数据成员c#?

Mou*_*Mou 6 c# oop

本书的大部分内容从未讨论过如何执行程序以及如何在堆栈和堆上为它们分配内存.当数据存储在堆栈上和堆上时.

假设我有一个常规课程

public class MyClass
{
    int Age=0;
    string strName="None"
    Double Salary=0;

    public void Data1()
    {
        Age=30;
        strName="Robin";
        Salary=3500;
    }
}
Run Code Online (Sandbox Code Playgroud)

1)所以对于上面的类将如何分配内存.当程序运行时,将分配内存或当我们创建实例时,将分配内存.当我们Data1()通过实例调用时,会发生什么以及如何分配内存.内存将被分配用于函数调用或数据成员初始化?告诉我将分配多少内存age,namesalary.内存将在堆栈或堆上分配.

public class MyClass
{
    static int y=0; 
    static string strComp="None"
    int Age=0;
    string strName="None"
    Double Salary=0;

    public void Data1()
    {
        Age=30;
        strName="Robin";
        Salary=3500;
    }

    public static void Data3()
    {
         y=50;
         strComp="Hello";
    }
}
Run Code Online (Sandbox Code Playgroud)

2)如何以及何时为静态数据成员和函数分配内存.当我们调用时, MyClass.Data3()将分配内存或当我们运行应用程序时.内存是在堆还是堆栈上分配的?

3)如何为静态类分配memroy.存储在堆或堆栈上的静态类...如果堆栈那么为什么?

在这里我问了几个问题请详细解释.谢谢.

Bro*_*ass 7

1.)在创建类的实例时将分配内存.当您调用时Data1()不需要额外的内存,因为您只引用类实例的字段(而没有其他本地变量).由于MyClass是引用类型,因此将在托管堆上分配内存.

2.)静态方法不消耗任何内存.在访问任何静态字段之前初始化静态字段,或者创建包含它们的任何类型的实例(MyClass在本例中)

3.)您无法创建静态类的实例,因此只有在创建类型本身时才动态分配内存.保证加载静态类并初始化它们的字段,并在程序中第一次引用类之前调用​​它们的静态构造函数.创建后,静态类将保留在内存中,直到关闭应用程序域.