我熟悉C#规范的5.3节,其中说必须在使用前分配一个变量。在C和非托管C ++中,这是有道理的,因为不会清除堆栈,并且用于指针的内存位置可能在任何地方(导致难以跟踪错误)。但是我给人的印象是运行时并没有真正“未分配”的值。特别是,未初始化的引用类型将始终具有null值,永远不会具有先前调用方法或随机值后遗留下的值。这是正确的吗?还是我错误地认为这些年来检查空值就足够了?您可以在C#中使用真正的非初始化变量吗,还是CLR会处理这个问题,并且总是设置了一些值。
3 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
这取决于声明变量的位置。在类中声明的变量将使用默认值自动初始化。
object o;void Method(){ if (o == null) { // this will execute }}
在方法中声明的变量未初始化,但是在首次使用该变量时,编译器会检查以确保已初始化该变量,因此代码将无法编译。
void Method(){ object o; if (o == null) // compile error on this line { }}
- 3 回答
- 0 关注
- 736 浏览
添加回答
举报
0/150
提交
取消