一尘不染

实例字段与局部变量的初始化

c#

我一直想知道为什么在下面的示例中, 初始化实例字段(依靠它将具有其默认值)并访问它是可以的,而局部变量显然 必须
初始化,即使我将其初始化为默认值也是如此反正会…

  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'
    }
  }

阅读 340

收藏
2020-05-19

共1个答案

一尘不染

对于局部变量,编译器对流程有很好的了解-它可以看到变量的“读取”和变量的“写入”,并证明(在大多数情况下)首次写入将在首次读取之前进行。

实例变量不是这种情况。考虑一个简单的属性-您如何知道是否有人会在获得它之前对其进行设置?这使得强制实施明智的规则基本上是不可行的-
因此,您要么必须确保在构造函数中设置了 所有 字段,要么允许它们具有默认值。C#团队选择了后一种策略。

2020-05-19