C# 中整数初始化和声明背后的内存管理概念

本文关键字:内存 管理 背后 声明 整数 初始化 | 更新日期: 2023-09-27 18:34:50

愚蠢的问题,但我只需要了解整数初始化和声明的内存管理概念。两种语法在内存方面有什么区别。

private int a;
and 
private int a=0;

谢谢。

C# 中整数初始化和声明背后的内存管理概念

简短回答:无。

长答案:所有变量在返回到用户定义的代码之前都由 CLR 使用默认值进行初始化。无论如何,您的字段都将使用 0 进行初始化,然后您才能对其进行任何类型的访问。

10.5.4 字段初始化

字段

的初始值,无论是静态字段还是 实例字段是字段类型的默认值 (§5.2(。是的 无法在此默认值之前观察字段的值 初始化已发生,因此字段永远不会 "未初始化"。

在C#中,所有内容都以一种或另一种方式初始化。

如果这是C++并且您在全球空间中完成了第一个,那将是真正的垃圾。 但 C# 会阻止你使用该变量,直到它确定它已被初始化,或者它会自己初始化它。

至于内存管理方面,整数可能不是最好的例子。整数在内存中并不完全"管理"。它们只是类实例中的 4 个字节,随着类的生存或死亡而存在或死亡。现在,如果你问的是引用值,那么你可以预期,当类死亡并且它去清理自己时,C# 将让它尝试清理它作为成员所拥有的所有内容,这可能会导致破坏另一个类的实例。

在 c# 中,默认情况下会初始化所有变量...因此,您不需要启动任何变量。

坦率地说,C# 中的两行之间没有区别。如果未初始化所有成员变量,则为其赋值。

请按如下方式验证两行:

private int a;
private int a1 = 0;
// Compare with default value.
Console.WriteLine(a1 == default(int));
// Compare both variables
Console.WriteLine(a1 == a);