billypon 发表于 2013-3-6 16:39:43

c#中var和dynamic关键字


[*]var是一种推断类型
[*]类型在编译成IL时就确定就确定类型
[*]var a=5, int32 a=5;var b=“abc”,String b=“abc”
[*]有时候不的不用var,象匿名类型,Linq中(部分)
[*]var user = new { Name = “zhou”, Age = 10 };至于user我们不知道类型,但编译器知道,它会生成一个类,名字类似AnonymousType什么什么
[*]Var不会带来性能影响,因为在第一次编译时就确定了类型,运行时已经有明确的类型
[*]如果声明var list=GetList(),虽然不会出错,但不利用易读性一眼看不出返回的类型,看情况而用
[*]Var不能用在返回值,参数,和声明全局变量中
[*]Dynamic和var截然不同,var在编译时确定类型,前者在运行时确定类型,可以作返回值,参数类型等
[*]Dynamic是提供动态编程的核心,很多行为和object相似,有人说是对object 封装(其实就是object),使用dynamic编译器会生成很多辅助代码
[*]VS对dynamic无法智能提示和判断,异常只有在运行时才能抛出
[*]Dynamic大简化了反射调用,直接可以用对象调用属性,如obj.XX,XX可以是方法也可以是属性,等等。
[*]不到必要时不要用dynamic,代价比较 大,反射时可以用,某些情况 下dynamic会比反射快(因为缓存)
页: [1]
查看完整版本: c#中var和dynamic关键字