本帖最后由 Adam丶鱼 于 2017-11-20 18:21 编辑
1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在foreach一个集合的时候, 也要为遍历的集合的元素,指定变量的类型 隐式类型的出现, 程序员就不用再做这个工作了。 (2)使用方法 来看下面的代码: var a = 1; //int a = 1; var b = "123";//string b = "123";
var myObj = new MyObj();//MyObj myObj = new MyObj()
上面的每行代码,与每行代码后面的注释,起到的作用是完全一样的 也就是说,在声明一个变量(并且同时给它赋值)的时候,完全不用指定变量的类型,只要一个var就解决问题了 (3)你担心这样写会降低性能吗? 我可以负责任的告诉你,这样写不会影响性能! 上面的代码和注释里的代码,编译后产生的IL代码(中间语言代码)是完全一样的 (编译器根据变量的值,推导出变量的类型,才产生的IL代码) (4)这个关键字的好处: 你不用在声明一个变量并给这个变量赋值的时候,写两次变量类型 (这一点真的为开发者节省了很多时间) 在foreach一个集合的时候,可以使用var关键字来代替书写循环变量的类型 (5)注意事项 你不能用var关键字声明一个变量而不给它赋值 因为编译器无法推导出你这个变量是什么类型的。 2.匿名类型 (1)源起 创建一个对象,一定要先定义这个对象的类型吗? 不一定的! 来看看这段代码 (2)使用 var obj = new {Guid.Empty, myTitle = "匿名类型", myOtherParam = new int[] { 1, 2, 3, 4 } }; Console.WriteLine(obj.Empty);//另一个对象的属性名字,被原封不动的拷贝到匿名对象中来了。 Console.WriteLine(obj.myTitle); Console.ReadKey(); new关键字之后就直接为对象定义了属性,并且为这些属性赋值 而且,对象创建出来之后,在创建对象的方法中,还可以畅通无阻的访问对象的属性 当把一个对象的属性拷贝到匿名对象中时,可以不用显示的指定属性的名字,这时原始属性的名字会被“拷贝”到匿名对象中 (3)注意 如果你监视变量obj,你会发现,obj的类型是Anonymous Type类型的 不要试图在创建匿名对象的方法外面去访问对象的属性! (4)优点 这个特性在网站开发中,序列化和反序列化JSON对象时很有用
|