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

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

假设我有一个常规课程

public class MyClass { int Age=0; string strName="None" Double Salary=0; public void Data1() { Age=30; strName="Robin"; Salary=3500; } } 

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

 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"; } } 

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

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

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

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

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

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

首先,只有在使用new()指令实际创建类实例时才会创建类实例。

 MyClass a = new MyClass(); 

只有在创建新实例时,才会分配内存,包括所有对象的字段。

静态成员不属于该类的对象实例。
你可以这样想:类本身有一个表示实际类类型的对象,所有静态成员和方法都属于该对象。 (实际上并不是这样,但通过这种方式更容易理解静态概念)
静态类成员在程序开头(或首次加载dll时)创建。

当您使用new()创建新对象时,它将在堆中创建(以及其所有成员)。

在堆栈中创建的变量属于运行时环境中的方法,并且仅在您访问声明它们的块之后。