C#未初始化的变量有危险吗?

我熟悉C#规范的5.3节,其中说必须在使用前分配一个变量。

在C和非托管C ++中,这是有道理的,因为不会清除堆栈,并且用于指针的内存位置可能在任何地方(导致难以跟踪错误)。

但是我给人的印象是运行时并没有真正“未分配”的值。特别是,未初始化的引用类型将始终具有null值,永远不会具有先前调用方法或随机值后遗留下的值。

这是正确的吗?还是我错误地认为这些年来检查空值就足够了?您可以在C#中使用真正的非初始化变量吗,还是CLR会处理这个问题,并且总是设置了一些值。


子衿沉夜
浏览 737回答 3
3回答

牛魔王的故事

这取决于声明变量的位置。在类中声明的变量将使用默认值自动初始化。object o;void Method(){     if (o == null)     {         // this will execute     }}在方法中声明的变量未初始化,但是在首次使用该变量时,编译器会检查以确保已初始化该变量,因此代码将无法编译。void Method(){     object o;     if (o == null) // compile error on this line     {     }}
打开App,查看更多内容
随时随地看视频慕课网APP