声明上的差异:;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 x=";vs“;var x;x=&”;

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()对象的值
但是第二个错误是因为它将分配一个没有类型的内存!你不能把任何类型的对象放在特定的内存中!