我一直想知道为什么在下面的示例中, 不 初始化实例字段(依靠它将具有其默认值)并访问它是可以的,而局部变量显然 必须 初始化,即使我将其初始化为默认值也是如此反正会…
public class TestClass { private bool a; public void Do() { bool b; // That would solve the problem: = false; Console.WriteLine(a); Console.WriteLine(b); //Use of unassigned local variable 'b' } }
对于局部变量,编译器对流程有很好的了解-它可以看到变量的“读取”和变量的“写入”,并证明(在大多数情况下)首次写入将在首次读取之前进行。
实例变量不是这种情况。考虑一个简单的属性-您如何知道是否有人会在获得它之前对其进行设置?这使得强制实施明智的规则基本上是不可行的- 因此,您要么必须确保在构造函数中设置了 所有 字段,要么允许它们具有默认值。C#团队选择了后一种策略。