声明上的差异:;var x=";vs“;var x;x=&”;
本文关键字:var quot vs 声明 | 更新日期: 2023-09-27 17:58:19
我是C#的新手,请帮助我理解以下语句之间的区别:
var variable_name = new class_a(); // there is no error and is working fine
var variable_name;
variable_name = new class_a(); // this line is throwing error
当我将语句重写为时
class_a variable_name;
variable_name = new class_a(); // this is working fine
var
用于引入隐式类型的局部变量。该类型在编译时是已知的,并且是从初始化语句右侧的表达式的类型推断出来的。使用您的示例:
var variable_name = new class_a();
编译器推断CCD_ 2是产生类型为CCD_。因此,variable_name
被声明为class_a
类型。此代码完全等同于
class_a variable_name = new class_a();
如果省略了初始化的右侧,那么编译器就无法推断类型。因此出现了编译错误。
var
自动根据初始化变量的值推断数据类型。
var i = 3; // 3 is an int; thus, i is declared as an int.
在第二个示例中,没有指定任何值,因此,推断是不可能的。
var i; // no data type can be inferred
当您使用var
时,您没有指定datatype
,因此您应该为它分配一些值,以便var
的"变量"成为该datatype
。
在var
的情况下,只声明而不赋值将没有帮助,并将引发错误。
希望它能消除你的疑虑。
因为var
推断类型,并在编译时计算为静态类型声明,例如:
var var_name; // The compiler does not know what type var is. It has not been inferred. Error!
var var_name = new class_a(); // The compiler knows var has been inferred as class_a();
相当于…
class_a var_name = new class_a();
下载ILSpy,编译您的代码,使用ILSpy反映它,并查看var
声明会发生什么。
编译器在为变量分配内存块时想要知道变量的类型。第3行执行此操作,然后给它一个值。第一行是可以的,因为它在一行上,编译器知道变量的类型应该是class_a
,它将分配一个内存,同时给出new class_a()
对象的值
但是第二个错误是因为它将分配一个没有类型的内存!你不能把任何类型的对象放在特定的内存中!