C# 6.0可能的新特性及C#发展历程
据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework 4.5.1。
从Visual Studio的更新规律上来看,微软2或者3年,更新增加的东西会比较多,所以对于C# 6.0,还是有一些期待的。
下面这张图列出了C#每次重要更新的时间及增加的新特性,对于了解C#这些年的发展历程,对C#的认识更加全面,是有帮助的。其中图的最后一行C#6.0是根据一些博客整理的,如有错误,随时改正。
C# 6.0可能的新特性
1、主构造函数(Primary Constructors)
主构造函数给类中的变量赋值
Before
- public class Point {
- private int x, y;
- public Point(int x, int y)
- this.x = x;
- this.y = y;
- }
- }
After
- public class Point(int x, int y) {
- private int x, y;
- }
2、自动属性赋值(Auto Properties)
Before
- class Point
- {
- public int X { get; private set; }
- public int Y { get; private set; }
- public Point()
- {
- this.X = ;
- this.Y = ;
- }
- }
After
- class Point
- {
- public int X { get; private set; } = ;
- public int Y { get; private set; } = ;
- }
3、using静态类(Static type using statements;)
using会把引用类的所有静态方法导入到当前命名空间
Before
- public double A { get { return Math.Sqrt(Math.Round(5.142)); } }
After
- using System.Math;
- ...
- public double A { get { return Sqrt(Round(5.142)); } }
4、Property Expressions
Before
- public double Distance {
- get { return Math.Sqrt((X * X) + (Y * Y)); }
- }
After
- public double Distance => Math.Sqrt((X * X) + (Y * Y));
初看起来像Lambda表达式,其实和Lambda无关系。
5. Method Expressions
Before
- public Point Move(int dx, int dy) {
- return new Point(X + dx1, Y + dy1);
- }
After
- public Point Move(int dx, int dy) => new Point(X + dx, Y + dy);
这个和Property Expressions类似
6、Params for enumerables
Before
- Do(someEnum.ToArray());
- ...
- public void Do(params int[] values) { ... }
After
- Do(someEnum);
- public void Do(params IEnumerable<Point> points) { ... }
以前params是只可以修饰array类型的参数,现在多了一些类型
7、Monadic null checking(null检查运算符)
Before
- if (points != null) {
- var next = points.FirstOrDefault();
- if (next != null && next.X != null) return next.X;
- }
- return -;
After
- var bestValue = points?.FirstOrDefault()?.X ?? -;
这个少了好几行代码,赞啊
8、Constructor type parameter inference
Before
- var x = MyClass.Create(, "X");
- ...
- public MyClass<T1, T2> Create<T1, T2>(T1 a, T2 b) {
- return new MyClass<T1, T2>(a, b);
- }
After
- var x = new MyClass(, "X");
9、 Inline declarations for out params(内联out参数定义)
Before
- int x;
- int.TryParse("", out x);
After
- int.TryParse("", out int x);
说实话,这个很常用。
当然,C# 6.0的全部新特性不止这么多,限于篇幅,就整理这些,若想了解更多,请参考下面的链接。
参考资料:
http://roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status&referringTitle=Documentation
http://en.wikipedia.org/wiki/.NET_Framework_version_history
http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated
http://www.kunal-chowdhury.com/2012/07/evolution-of-c-10-50-what-are-new.html
http://www.cnblogs.com/TianFang/p/3647144.html
C# 6.0可能的新特性及C#发展历程的更多相关文章
- C# 6.0可能的新特性及C#发展历程[转]
C# 6.0可能的新特性及C#发展历程[转] 年10月份发布了,对应的是.Net Franework 4.5.1. 或者3年,更新增加的东西会比较多,所以对于C# 6.0,还是有一些期待的. 下面 ...
- 转载——C# 6.0可能的新特性及C#发展历程
据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework ...
- 有史来最大改变 Android 5.0十大新特性
有史来最大改变 Android 5.0十大新特性 2014.10.16 14:51:31 来源:腾讯数码作者:腾讯数码 ( 0 条评论 ) 距离Android系统上一次重大更新不到一年的时间,谷歌 ...
- C# 6.0可能的新特性
C# 6.0可能的新特性 1.主构造函数(Primary Constructors) 主构造函数给类中的变量赋值 Before public class Point { private int x, ...
- Spring Boot 2.0正式发布,新特性解读
作者|翟永超 Spring Boot 2.0 来啦,有哪些新特性?升级吗? 写在前面 北京时间 3 月 1 日,经过漫长的等待之后,Spring Boot 2.0 正式发布.作为 Spring 生态中 ...
- MySQL 8.0.2复制新特性(翻译)
译者:知数堂星耀队 MySQL 8.0.2复制新特性 MySQL 8 正在变得原来越好,而且这也在我们MySQL复制研发团队引起了一阵热潮.我们一直致力于全面提升MySQL复制,通过引入新的和一些有趣 ...
- Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结
Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.----------- ...
- c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】
引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. ---------- ...
- 【HANA系列】SAP HANA 1.0 SPS 11 新特性
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA 1.0 SPS ...
随机推荐
- POJ 3009 DFS+剪枝
POJ3009 DFS+剪枝 原题: Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16280 Acce ...
- 【Cocos2d-x 3.x】 精灵帧缓存和纹理缓存
转自泰然网(Cocos2d-x 3.x官方文档):精灵帧缓存:http://www.tairan.com/archives/6378/ 纹理缓存: http://www.tairan.com/ar ...
- jdb调试命令
常用调试命令: run GeoHashTest #带参数运行 stop at GeoHashTest:22 #断点GeoHashTest文件的22行 stop in GeoHashEncode.Enc ...
- JSON数据;
1.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 2.JSON的规则很简单: 对象是一个无序的“‘名称/值'对”集合.一个对象以“{”(左括号)开始, ...
- ubuntu kylin 16.04系统的基本安装
系统版本:ubuntu kylin 16.04 硬件状况:500G HDD+120G SSD 已安装操作系统:WIN 10专业版(craked) ——WIN 10系统是装在SSD的第一个盘符内的.以前 ...
- php的一些问题
1.关于php <? php echo "hello world"; include "./index.html"; require "./in ...
- android studio入门
目前的工作是蓝牙相关的,所以最近心血来潮想折腾下Android开发,方便调试自己的固件, 装好Android Studio跟SDK之后,感谢nordic的公开代码,研究了一会,感觉并没有多费劲 相关的 ...
- Python之路,day3-Python基础
三级菜单 menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, ...
- python-print
%s,%d就是占位符.还有%r 只是说明这样的对应:%s-->str();%r-->repr(),什么意思呢?就是说%s调用的是str()函数把对象转化为str类型,而%r是调用了repr ...
- Process的Waitfor() 引起代码死锁
Java用process调用c#的exe后,process.waitfor(). exe执行会停在某处.据说是waitfor引起的exe子线程死锁. 先存一个链接 http://yearsaaaa12 ...