以下代码编译没有问题。很明显,
_dependency
总是 null
,因此无法以任何方式使用它(除了进行评估) - 是吗?为什么编译器没有意识到这一点并失败呢?public class MyClass
{
private readonly MyDependency _dependency;
public MyClass()
{
_dependency.MyMethod();
}
}
明确一下,我知道上面的代码是糟糕的代码,这是开发人员的问题 - 就像任何其他的编译时错误一样。我本以为编译器会抛出“使用未分配变量”的错误。
为什么会编译通过?难道我不知道可以在某种情况下像这样使用一个“null”对象吗?
编辑:
确认一下 - 我并不希望依赖编译器来检查糟糕的代码,语法上讲,它绝对没问题。我的问题实际上有两个方面,一是是否有我不知道的场景可以使得此代码执行良好。第二个问题是 - 如果编译器已经处理了“使用未分配变量”的错误,为什么它不能检测到这样的问题?有什么区别?
MyDependency
声明为类还是结构体? - DmitryMyDependency
有一个名为MyMethod
的方法,那么这段代码没有问题。编译器不会检查对象是否被初始化,这是在运行时或使用第三方工具进行提示(如 Resharper)来完成的。 - CavernaMyMethod
是一个扩展方法(当然,在旧的C#1时代它们还没有被引入)。编译这段代码,并调用MyDependency.MyMethod(null)
应该是可以通过编译的,不是吗? - MakePeaceGreatAgain