C# var标识符 和 dynamic关键字
2013-05-19 14:15
489 查看
静态语言:静态类型语言的类型判断是在运行前判断(如编译阶段)C#,C++就是静态语言
动态语言:不执行编译时类型检查,仅在运行时识别对象的类型。这种方法有利有弊:代码编写起来更快、更容易,但同时,由于您不会获得编译器错误。如javascript语言
1 var标识符
C#中声明变量的方法 : <type> <varName> = <varValue> eg int a = 10;
C#3.0引入了关键字var 他可以替代<type> 即:var <varName> = <varValue> eg var a=10;
代码(1)
结果
从结果可以看出 变量a和b的类型都是int32 ,a的类型不是var。因此注意:使用var的时候,我们声明的变量并不是var类型的,也不是声明了一个类型可变的变量,否则C#就不是强类型的语言了!var的作用只是:让编译器去判断变量的类型!如果编译器不能够确定变量的类型,编译器就不会编译!因此,在使用var的时候,必须初始化变量的值!这和下面的dynamic类型有区别,dynamic类型在编译的时候,不考虑“语义”,只在运行的时候判断。
代码(2)
结果:
var还可以通过数组初始化器来判断数组的类型;就是说根据数组成员的类型来判断。
注意: 1)声明方式不能使用var []varArray, 2)元素的类型都必须统一! 3)元素不能出现空null
2: dynamic动态类型
C# 4 中引入的 dynamic 关键字可使某些传统上依赖于 object 关键字的情形更容易编写和维护。实际上,动态类型在后台使用 System.Object 类型。但与 object 不同的是,动态类型不需要在编译时执行显式转换操作,因为它仅在运行时识别类型。这一点十分相像动态语言,但是C#不是动态语言。
看这段代码:
编译结果正常:
运行结果出错:
从编译和运行这两个结果可以看出来,dynamic是在运行期间进行错误检查的!但是,var和object是在编译期间进行的!
那么dynamic是什么?
结果:
可以看出来。dynamic和var“相似”,但是,他们有许多不同的地方。1)var是静态,dynamic是动态的。2)var只能用于局部变量,并且var不能用于函数的返回类型。
下面这段代码能正常运行。
下面这段代码就不行了
结果:
动态语言:不执行编译时类型检查,仅在运行时识别对象的类型。这种方法有利有弊:代码编写起来更快、更容易,但同时,由于您不会获得编译器错误。如javascript语言
1 var标识符
C#中声明变量的方法 : <type> <varName> = <varValue> eg int a = 10;
C#3.0引入了关键字var 他可以替代<type> 即:var <varName> = <varValue> eg var a=10;
代码(1)
namespace Test { public class Test { static void Main(string[] args) { var a = 5; int b = 10; Console.WriteLine("a的类型:"+a.GetType().ToString()); Console.WriteLine("b的类型:" + b.GetType().ToString()); Console.Read(); } } }
结果
从结果可以看出 变量a和b的类型都是int32 ,a的类型不是var。因此注意:使用var的时候,我们声明的变量并不是var类型的,也不是声明了一个类型可变的变量,否则C#就不是强类型的语言了!var的作用只是:让编译器去判断变量的类型!如果编译器不能够确定变量的类型,编译器就不会编译!因此,在使用var的时候,必须初始化变量的值!这和下面的dynamic类型有区别,dynamic类型在编译的时候,不考虑“语义”,只在运行的时候判断。
代码(2)
namespace Test { public class Test { static void Main(string[] args) { int []usuallArray=new int[100]; var varArray = new[] { 1, 4, 41 }; //声明方式不能使用var []varArray, //元素的类型都必须统一! //元素不能出现空null Console.WriteLine(varArray.GetType()); Console.WriteLine(usuallArray.GetType()); Console.Read(); } } }
结果:
var还可以通过数组初始化器来判断数组的类型;就是说根据数组成员的类型来判断。
注意: 1)声明方式不能使用var []varArray, 2)元素的类型都必须统一! 3)元素不能出现空null
2: dynamic动态类型
C# 4 中引入的 dynamic 关键字可使某些传统上依赖于 object 关键字的情形更容易编写和维护。实际上,动态类型在后台使用 System.Object 类型。但与 object 不同的是,动态类型不需要在编译时执行显式转换操作,因为它仅在运行时识别类型。这一点十分相像动态语言,但是C#不是动态语言。
看这段代码:
namespace Test { class Program { static void Main(string[] args) { dynamic a="1111"; a++; Console.Read(); } } }
编译结果正常:
运行结果出错:
从编译和运行这两个结果可以看出来,dynamic是在运行期间进行错误检查的!但是,var和object是在编译期间进行的!
那么dynamic是什么?
namespace Test { public class Test { static void Main(string[] args) { dynamic a,b; a = "asdsa"; b = 9; Console.WriteLine(a.GetType()); Console.WriteLine(b.GetType()); Console.Read(); } } }
结果:
可以看出来。dynamic和var“相似”,但是,他们有许多不同的地方。1)var是静态,dynamic是动态的。2)var只能用于局部变量,并且var不能用于函数的返回类型。
下面这段代码能正常运行。
namespace Test { class Program { static void Main(string[] args) { Console.Read(); } public static dynamic Get(int a) { if(a>0) { return 1; } else { return ""; } } } }
下面这段代码就不行了
namespace Test { class Program { static void Main(string[] args) { Console.Read(); } public static var Get(int a) { if(a>0) { return 1; } else { return ""; } } } }
结果:
相关文章推荐
- (转)C#4.0的dynamic和var及object关键字辨析
- 简述C#中关键字var和dynamic的区别
- C#中dynamic关键字的正确用法(推荐)
- C# var 的关键字的使用
- C#4.0中var和dynamic的区别
- c#使用dynamic关键字传输数据的用法
- C# 关键字var
- 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
- c#是否使用var关键字的区别
- 一起谈.NET技术,了解 C# 4 中的 Dynamic 关键字
- C#中var关键字用法分析
- C#新类型标识符:var
- C# Dynamic关键字之:dynamic为什么比反射快的详解
- [转]理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
- C#的var关键字
- [翻译]关键字“dynamic”和“object”(及“var”)有什么不同?
- C# 3.0 隐含类型 var关键字
- C# 动态语言特性,dynamic 关键字研究
- C# 匿名对象(匿名类型)、var、动态类型 dynamic
- C#学习笔记第二篇之标识符、关键字、基本数据类型