C#3.0智能的编译器「建议收藏」

C#3.0智能的编译器

大家好,又见面了,我是全栈君。

智能的编译器

C#3.0中,编译器变的越来越智能,我们不用提供给它完整的信息,仅需要提供必要的信息,编译器就可以进行推断为我们补全未提供的信息

   

自动实现的属性

在之前我们生成一个类时需要有一个字段,但是字段一般不对外暴露,所以还会有一个对应的属性。类似下图

C#3.0智能的编译器「建议收藏」

一个简单的name,我们就要写这么多代码,明显是让人沮喪的,而现在我们仅要下面这样一行简单的代码就可以,而在内部,实际上还是会有一个对应的字段,并且字段名看起来乱七八糟的,当然这是为了保证不会命名冲突,但是开发人员看不到啊,可以轻松的使用属性

C#3.0智能的编译器「建议收藏」

   

隐式的局部变量

实际上我更喜欢说是类型推断,有时我们生明一个变量时,它的类型非常的长,比如下图,仅仅只是创建一个键值对,就要写这么长的代码。

C#3.0智能的编译器「建议收藏」

如果使用了类型推断的话,我们可以使用var关键词来替换局部变量前面的类型,如下图 我们成功的简化了代码,但是实际上是编译器帮我们做了类型推断,鼠標放上去,可以看到类型还是Dictionary<string,string>。

C#3.0智能的编译器「建议收藏」

   

和它的名称一样,隐式的局部变量仅可以在定义局部变量中使用,属性,字段都不可以。而且在表达式中我们必须明确的给定类型是什么。不可以是模拟两可的。也不可以为null

   

   

初始化器

初始化器分为对象初始化器与集合初始化器,在之前我们创建一个类的实例并为其成员赋值也是比如繁瑣的,如果没有構造函數的话我们无法在一个表达式中完成初始化操作。看起来应该如下图一样

C#3.0智能的编译器「建议收藏」

而有了对象初始化器我们可以换一种写法,在后面加一个大括号,然后进行赋值即可。甚至可以发现小括号都被忽略了,当然这是有要求的,必须有无参的構造函數才可以。

C#3.0智能的编译器「建议收藏」

当然,这也是编译器的功劳,编译后的代码,和我们之前并无区别。只是帮我们做了这些繁瑣的事

   

集合初始化器和上面是类似的,我们创建一个集合的时候,要调Add方法一个一个的赋值 ,现在一切变得简单起来

C#3.0智能的编译器「建议收藏」

使用集合初始器只要类型有Add方法或者实现Ienumerable,为什么要有这个限制呢,因为还是编译器在背后帮我们一个一个的Add…..

   

隐式类型的数组

在创建一个数组的时候,我们要指定数组的类型,比如

Var array = new string[3]{“1″,”2″,”3”};

而现在写法变了,我们如果刚开始就初始化数组的话那么仅仅只要像下面这样就可以

Var array = new []{“1″,”2″,”3”}

编译器会要根据我们提供的项的类型进行推断,然后从而确定数组的话,当然我们给的所有项类型都要是一致的。

   

匿名类型

有时会有一种苦惱,我们需要一个简单的对象,并且只在一个地方使用一次。而又不得不为它去写一个类。现在这些得到了解决,就是匿名类型。

看看下图做了什么,我们创建了一个变量,但是它的类型是什么呢?在之前的理解中,这样是不对的,而现在它是匿名类型的。IDE也给了我们足够的提示,我们可以直接per.Name这样的去使用。

C#3.0智能的编译器「建议收藏」

我们可以多次创建匿名类型,对于属性名相同,类型也相同的,编译器会为我们生成一个类。而属性名相同,类型不同的,会产生两个不同的类型,它们是同一个泛型类型生成的。

而我们写的那些属性,是只读属性,创建后,不可以再进行更改其值所以是不易变的也是线程安全的,

转载于:https://www.cnblogs.com/LiangSW/p/7327644.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108251.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 注册会计师_会计师报考需要什么条件

    注册会计师_会计师报考需要什么条件本人是华政的,学的是国际法,成绩一般,从来没有上课的习惯。会计是零基础,6个月通过了注册会计师的会计、财务成本管理、税法、经济法、公司战略与风险管理5门课,想在这里和大家分享一下经验,也希望大家指教~~资料下载:http://www.iliyu.com/ 里面几乎什么资料都下的到          http://www.zhukuai.com/ 这个论坛8错          ht

    2022年10月4日
    5
  • Linux云服务器挖矿病毒(crypto和pnscan)导致CPU占用100%问题解决方案「建议收藏」

    Linux云服务器挖矿病毒(crypto和pnscan)导致CPU占用100%问题解决方案「建议收藏」木马攻击问题由来阐述我买了三年的阿里云服务器(在阿里云官网买的),已经使用了一年多了,平时拿来搭建网站,有时也拿来学习技术和开发测试,一直使用很稳定。直到近期我服务器上安装了docker并部署了springboot+mysql+nginx项目,就被攻击了。但就在今年的5月14号,我的服务器被木马攻击,然后被拿去挖矿了。我服务器的cpu持续维持在CPU100%.后果是直接导致我网站无法正常请求和响应。而且Linux服务器的root权限被窃取了。黑客在服务器/root/.ssh目录下生成了连root用户

    2022年5月1日
    57
  • 【树莓派】一根网线将树莓派4B直连笔记本电脑的方法

    【树莓派】一根网线将树莓派4B直连笔记本电脑的方法当我们为新买来的树莓派刷上系统之后,如何将树莓派和笔记本电脑连接到同一网络使用SSH工具登录树莓派呢?相信大多数人的做法是将树莓派连接到路由器上,然后通过SSH工具(putty,SecureCRT等)远程登录,但如果你没有显示器和HDMI线,那么,这里介绍如何使用一根网线来连接树莓派。准备材料1、树莓派2、已经刷入系统的SD卡3、一根网线4、一个已经连接互联网的笔记本5、usb网口…

    2022年6月5日
    43
  • android之onCreateOptionsMenu失效,按菜单键无反应

    做点名app的时候,由于教师端和学生端UI相似,所以用了一套UI框架,结果修改一番之后,点击菜单键无反应,也就是下面的onCreateOptionsMenu不执行了,  @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu);

    2022年3月11日
    233
  • 了解ACL—通配符掩码「建议收藏」

    了解ACL—通配符掩码「建议收藏」学习ACL,搞懂ACL就不能不搞定wildcardmask,通配符掩码。说简单点,通配符掩码就是0为绝对匹配,必须严格匹配才行,而1为任意,从某种意义上讲,如果一个8位上有一个1字符,那也只有两种方式,0或者1,但是如果进行组合,那么方式就多了。举例说明吧。一般我们在应用上都是进行地址块的匹配,怎么讲呢?就是说:1)对某个ABC类网进行匹配或者教通配符屏蔽2)对某个子网应用ACL。…

    2022年7月19日
    10
  • 如何将 apache2 URL 映射到 /var/www/ 以外的目录

    如何将 apache2 URL 映射到 /var/www/ 以外的目录

    2021年4月28日
    123

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号