Raj*_*eep 1 c# oop class declaration
这些声明之间有什么区别吗?
Animal animal;
Animal animal1 = null;
Run Code Online (Sandbox Code Playgroud)
有根据的区别C#规格基础上context.在a的上下文中method,编译器可以证明第一个animal未分配,因此可以在使用它的下一行生成编译器错误.如果编译器可以证明没有分配,C#编译器将不允许您使用方法变量.
但是,如果animal是类字段,它将自动初始化为默认值,编译器不会生成错误.
以下是C#规范:
5.3明确的任务
在函数成员的可执行代码中的给定位置,如果编译器可以通过特定的静态流分析(第5.3.3节)证明变量已被自动初始化或已被证实,则称该变量是明确赋值的.至少一项任务的目标.
所以对于第一个,编译器生成一个"Use of an unassigned local variable".而对于第二个,您明确地将变量赋值给null,因此编译器应该没问题.