C#局部变量未初始化:真的危险吗?
C#规范(第5.3节)规定,任何变量都必须在使用前赋值。此规则与C和非托管C 实践一致,在这些实践中,堆栈不会被清除,分配给指针的内存位置可能是任意的,从而导致难以检测的问题。
然而,与C和C 不同,C#使用托管运行时环境,这就提出了一个问题,即“未赋值”的值是否真的存在。具体来说,人们认为未初始化的引用类型总是接收空值,消除了保留来自先前方法调用或随机数据的可能性。
为了阐明这一假设,区分C#中的两种变量类型至关重要:
所以,问题仍然是:是否将局部变量归类为未初始化的变量,它们是否真的没有初始化,或者它们是否继承了字段的初始赋值行为?
答案实际上是“是”。所有局部变量,无论其初始赋值状态如何,都会由运行时初始化。因此,在第一次赋值之前,可以在调试器中始终观察到变量的默认状态。此外,此初始化消除了垃圾收集的潜在问题,并确保局部变量不会在没有正确初始化的情况下被视为托管引用。
虽然理论上运行时允许保留局部变量的初始垃圾状态,但实际实现规定它总是会将局部变量的内存清除为其默认值。这种积极的清零确保了未赋值局部变量的非法使用会被阻止为编译错误,从而防止潜在的错误。
以上是未初始化的 C# 局部变量真的很危险吗?的详细内容。更多信息请关注PHP中文网其他相关文章!