度量快速开发平台-专业、快速的软件定制快开平台

标题: 一:与LINQ有关的语言特性 [打印本页]

作者: Adam丶鱼    时间: 2020-4-20 18:19
标题: 一:与LINQ有关的语言特性
本帖最后由 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对象时很有用


作者: Adam丶鱼    时间: 2020-4-20 18:21

作者: 张兴康    时间: 2020-4-21 15:33





欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://p.delit.cn/) Powered by Discuz! X3.2