var关键字是C# 3.0开始新增的特性,称为推断类型。
var可代替任何类型,编译器会根据上下文来判断你到底是想用什么类型,类似 object,但是效率比object高点。
var 关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型、匿名类型、用户定义类型、.NET Framework 类库中定义的类型或任何表达式。
var定义变量有以下四个特点:
1.必须在定义时初始化
例如:
<span style="white-space:pre"> </span>var a =1 ; // IDE或编译器会根据你给a 的值1来"推论断定"a是一个整数类型 <span style="white-space:pre"> </span>var b ="123"; // b被推论断定为string类型
2.一旦初始化完成,就不能再给变量赋与初始值不同的值了
3.var要求是局部变量
4.使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样
*****************************************************************************************************************
那么问题来了:为什么在VS2010创建项目时选择net framework2.0的环境还可以使用var关键字?
C# 代码属于托管代码,托管代码会被编译器编译成IL代码,真正运行时其实是IL代码!你设置的目标平台版本只可以保证你的IL代码可以正常的运行,但是并不能检查你的C# 代码是否完全符合C#2.0的规范,因为编译时使用的还是C#4.0编译器。var这个关键字只是语法上的新特性,编译完的IL代码和过去没有区别,这样的特性俗称“语法糖”,只是语法上用起来比较甜蜜,而实际上没有什么区别!所以即使你的代码中有var,那还是可以运行在旧版本的.NET Framework上!
当然,如果你使用的的新特性是本质上的改变,那就无法通过编译了!