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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1693|回复: 2
打印 上一主题 下一主题

[分享] 一:与LINQ有关的语言特性

[复制链接]

182

主题

2120

帖子

4842

积分

论坛元老

Rank: 8Rank: 8

积分
4842
跳转到指定楼层
楼主
发表于 2020-4-20 18:19:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 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对象时很有用

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
发表于 2020-4-21 15:33:05 | 只看该作者
回复 支持 反对

使用道具 举报

182

主题

2120

帖子

4842

积分

论坛元老

Rank: 8Rank: 8

积分
4842
沙发
 楼主| 发表于 2020-4-20 18:21:44 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-16 10:07 , Processed in 0.131979 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表