为什么编译?

3 c# null compiler-errors

编译下面的代码没有问题.它_dependency总是很明显null,因此不可能以任何方式使用它(除了评估它) - 是吗?为什么编译器没有意识到这一点并且失败了?

public class MyClass
{
   private readonly MyDependency _dependency;

   public MyClass()
   {
      _dependency.MyMethod();
   }
}
Run Code Online (Sandbox Code Playgroud)

要清楚,我知道上面的代码是错误的代码,这是开发人员的错误 - 但是任何其他编译时错误都是如此.我以为编译器会抛出use of unassigned variable一种错误.

为什么编译?我没有意识到使用这样的null对象会很好吗?

编辑:

要确认 - 我希望依赖编译器检查编写不好的代码 - 我很欣赏,从语法上讲,它绝对没问题.我的问题确实是双重的,是否有一个我不知道哪种情况可能使这段代码执行得很好.第二个问题是 - 如果它已经处理错误,它为什么不能检测到这样的问题use of unassigned variable?有什么不同?

Gim*_*mly 7

因为编译器不检查那种问题.它的语法正确,非常好.空引用问题通常仅在运行时检测到,除非您使用将检测此类问题的代码分析工具.