C#中的var用法以及和JavaScript中的var的区别
2012-11-05 11:55
489 查看
C#中的var用法:
1. var是3.5新出的一个定义变量的类型其实也就是弱化类型的定义;
2. var可代替任何类型编译器会根据上下文来判断你到底是想用什么类型的;
3. 至于什么情况下用到var,我想就是你无法确定自己将用的是什么类型就可以使用var;
4. 类似obeject但是效率比obeject高点使用var定义变量时有以下四个特点:
· 必须在定义时初始化。也就是必须是var s = “abcd”形式,而不能是如下形式:var s;s =“abcd”;
· 一旦初始化完成,就不能再给变量赋与初始化值类型不同的值了。
· var要求是局部变量。
· 使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。
C#中的var和JavaScript中的var比较:
I.在C#3.0中增加了一个变量声明var,这个声明和JavaScript的var类似,但也有不同。
1. 相同点,它可以用var来声明任何类型的局部变量。
2. 不同点,它仅仅负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而且只能是局部变量。
II.相同点
它可以声明
var integer = 10;
var name ="edisundong";
var numbers = new int[] { 1,2, 3 };
III.不同点
var仅仅是一个关键字,它并不是C#3.0中的一种新的类型,而是负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,上面的语句相当于
int integer = 10;
string name = "edisundong ";
int[] numbers = new int[] {1, 2, 3 };
IV.注意点
1.在声明时必须同时赋值,因为声明依赖于赋值号右边的表达式,如果有下面的语句:
var integer;
integer = 10;
编译时会报Implicitly typed locals must be initialized错误。
2.在使用var声明一个局部变量后,它仍然具有强类型,可以做如下测试:
var integer = 10;
integer = "edisundong ";
编译时会报Cannot implicitly convert type 'string' to 'int'错误。
3.初始化器表达式的编译期类型不可以是空(null)类型,编译器无法根据null来推断出局部变量的类型,如有下面的语句:
var integer = null;
编译时会报Cannot assign '<null>' to an implicitly typedlocal错误。
4.初始化语句必须是一个表达式,初始化表达式不能包含它自身,但是可以是包含一个对象或集合初始化器的一个new表达式(即匿名类型)。
如可以这样去声明:
var coll = newHashtable();
5.var的声明仅限于局部变量,也可以包含在foreach、for、using语句中。 下面的使用是错误的:
class Program
{
privatevar i = 10; //全局私有变量。
staticvoid Main(string[] args)
{}
}
编译时会报The contextual keyword 'var' may only appear within a local variable declaration错误。
6.var 不能用作方法的参数和返回类型。
1. var是3.5新出的一个定义变量的类型其实也就是弱化类型的定义;
2. var可代替任何类型编译器会根据上下文来判断你到底是想用什么类型的;
3. 至于什么情况下用到var,我想就是你无法确定自己将用的是什么类型就可以使用var;
4. 类似obeject但是效率比obeject高点使用var定义变量时有以下四个特点:
· 必须在定义时初始化。也就是必须是var s = “abcd”形式,而不能是如下形式:var s;s =“abcd”;
· 一旦初始化完成,就不能再给变量赋与初始化值类型不同的值了。
· var要求是局部变量。
· 使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。
C#中的var和JavaScript中的var比较:
I.在C#3.0中增加了一个变量声明var,这个声明和JavaScript的var类似,但也有不同。
1. 相同点,它可以用var来声明任何类型的局部变量。
2. 不同点,它仅仅负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而且只能是局部变量。
II.相同点
它可以声明
var integer = 10;
var name ="edisundong";
var numbers = new int[] { 1,2, 3 };
III.不同点
var仅仅是一个关键字,它并不是C#3.0中的一种新的类型,而是负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,上面的语句相当于
int integer = 10;
string name = "edisundong ";
int[] numbers = new int[] {1, 2, 3 };
IV.注意点
1.在声明时必须同时赋值,因为声明依赖于赋值号右边的表达式,如果有下面的语句:
var integer;
integer = 10;
编译时会报Implicitly typed locals must be initialized错误。
2.在使用var声明一个局部变量后,它仍然具有强类型,可以做如下测试:
var integer = 10;
integer = "edisundong ";
编译时会报Cannot implicitly convert type 'string' to 'int'错误。
3.初始化器表达式的编译期类型不可以是空(null)类型,编译器无法根据null来推断出局部变量的类型,如有下面的语句:
var integer = null;
编译时会报Cannot assign '<null>' to an implicitly typedlocal错误。
4.初始化语句必须是一个表达式,初始化表达式不能包含它自身,但是可以是包含一个对象或集合初始化器的一个new表达式(即匿名类型)。
如可以这样去声明:
var coll = newHashtable();
5.var的声明仅限于局部变量,也可以包含在foreach、for、using语句中。 下面的使用是错误的:
class Program
{
privatevar i = 10; //全局私有变量。
staticvoid Main(string[] args)
{}
}
编译时会报The contextual keyword 'var' may only appear within a local variable declaration错误。
6.var 不能用作方法的参数和返回类型。
相关文章推荐
- 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
- C#中按引用传递与按值传递的区别,以及ref与out关键字的用法详解
- javascript中是否使用var定义的区别,以及有名函数和匿名函数的区别。
- javascript的setInterval()与setTimeout()的用法和区别以及如何改变元素坐标位置
- 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
- [转]理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
- GetKeyState和GetAsyncKeyState以及GetKeyboardState函数的用法与区别2-------C#检查键盘大小写锁定状态
- javascript、jquery 、C#、sqlserveer、mysql、oracle中字符串截取的区别和用法
- javascript:void(0)的用法以及与href="#"的区别
- C#中StringBuilder用法以及和String的区别分析
- C#中StringBuilder用法以及和String的区别分析
- javascript中new Array()和var arr=[]用法区别
- Protetype, this以及var在javascript面象对象设计中的区别和应用
- JavaScript中instanceof运算符的用法以及和typeof的区别
- C#中StringBuilder用法以及和String的区别
- GetKeyState和GetAsyncKeyState以及GetKeyboardState函数的用法与区别2-------C#检查键盘大小写锁定状态
- 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
- 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
- C# 循环结构while,do-while和for的区别以及跳转语句
- c# 中Find与FindAll用法的区别