【发布时间】:2012-03-05 22:06:45
【问题描述】:
内存中的值是什么,例如声明后的整数值(int),但没有初始化?在“CLR vi C#”中,Richter 写道,值类型初始化为 0,但不允许使用。 那么像这样声明变量后内存中会出现什么
int testVar;
以及初始化校验机制是如何实现的?
【问题讨论】:
内存中的值是什么,例如声明后的整数值(int),但没有初始化?在“CLR vi C#”中,Richter 写道,值类型初始化为 0,但不允许使用。 那么像这样声明变量后内存中会出现什么
int testVar;
以及初始化校验机制是如何实现的?
【问题讨论】:
类型使用全为零的内存进行初始化。我不知道这是否符合所有值类型的规范,所以除非你检查,否则你不能指望它。对于不同的值类型,内存中的零可能意味着不同的东西,具体取决于类型所代表的内容。
值类型是自动初始化的,并且可以在它们是类的字段而不是局部变量时使用。据我所知,CLR 本身没有初始化检查。初始化检查由编译器执行,当使用未初始化的变量时会报告编译时错误。
【讨论】:
据我所知,声明会根据该特定类型所需的字节数保留一些内存。这些字节理论上可以随机填充物理上占用这些特定硬件字节的任何内容。
【讨论】:
int 作为类字段,它默认初始化为0。
在 c# 中,某些类型允许您拥有可以具有 null 值的变量,例如 Nullable 变量 (Int32?intAux)。这种类型一开始是空的。否则,Int32 变量不允许您具有空值。
您可以验证变量是否已初始化,执行类似 (intAux == null) 之类的操作。
【讨论】: