一用var定义变量
在C#中提供了一种新的声明变量的方式这就是var通过这个关键字在声明变量时就无需指定类型了变量类型是在初始化时由编译器确定的代码如下:
var ss =
abcd
;
MessageBoxShow(ssGetType()ToString());
上面的代码将显示SystemString从而证明C#编译器已经将ss编译成了String变量了而在输出ss后再输入后会看到将String类型变量的相应方法和属性也列出来了因此可以断定C#将ss看成了String类型而不是Object所以使用var定义变量同时可以拥有Object和强类型的优点
不过大家不要将var看成是javascript的var它们的区别是javascript是弱类型的语言而且javascript中的变量(也包括用var声明的变量)可以变换类型如下面的javascript所示
var s =
abcd
;
s=;
alert(s);
上面的代码第一次给s赋了一个字符串而第二行代码又给赋了一个整数这样的代码在javascript中没有任何问题但在C#中var变量一但被初始化确定类型后就无法改变类型了如下面的代码是无法编译通过的
var ss =
abcd
;
ss = ;
综上所述在使用var定义变量时有以下四个特点
必须在定义时初始化也就是必须是var s = abcd形式而不能是如下形式
var s;
s = abcd;
一但初始化完成就不能再给变量赋与初始化值类型不同的值了
var要求是局部变量
使用var定义变量和object不同它在效率上和使用强类型方式定义变量完全一样但笔者建议如果事先知道变量的类型尽量使用强类型方式来声明变量否则就会造成由于大量使用var而使得开发人员很难断定某个变量是什么类型这样不利于程序的维护和升级
虽然var有利有弊但笔者个人认为如果将动态语言转换成C#语言可以考虑使用var来定义变量这是因为动态语言没有类型而要将其转换成强类型的C#语言就必须给变量指定个类型但事先确定类型是很费劲的不如将其指定成var再由C#编译器去确定变量的具体类型那么如果在转换的过程中发现动态语言的变量改变了类型该怎么办呢?这个可以使用第三部分要讲的匿名类来解决这个问题
[] [] []