C#6.0特性(快来围观)
来源:互联网 发布:淘宝内部优惠卷网站 编辑:程序博客网 时间:2024/06/06 08:26
说明一下,很多博友一进来就认为仅仅是语法糖,C#语法的更新,代表着它的进步,语法糖是为了让我们更好的实现语句和功能,增加了易读性和易用性。而且它的每次进步,也会给我们带来新的支持和改进。比如C#(4.5/5)中出现的await,async这样异步编程的语法,可不仅是语法糖哦,这次又在Catch和finally中增加支持,大大增加异步编程的编程效率和实现方式的简化程度。
1、自动属性的增强
1.1、自动属性初始化 (Initializers for auto-properties)
C#4.0下的果断实现不了的。
C#6.0中自动属性的初始化方式
只要接触过C#的肯定都会喜欢这种方式。真是简洁方便呀。
1.2、只读属性初始化Getter-only auto-properties
先来看一下我们之前使用的方式吧
public class Customer { public string Name { get; } public Customer(string firstName,string lastName) { Name = firstName +" "+ lastName; } }
再来看一下C#6.0中
public class Customer { public string FirstName { get; }="aehyok"; public string LastName { get; }="Kris"; }
和第一条自动属性初始化使用方式一致。
2、Expression bodied function members
2.1 用Lambda作为函数体Expression bodies on method-like members
public Point Move(int dx, int dy) => new Point(x + dx, y + dy);
再来举一个简单的例子:一个没有返回值的函数
public void Print() => Console.WriteLine(FirstName + " " + LastName);
2.2、Lambda表达式用作属性Expression bodies on property-like function members
public override string ToString() { return FirstName + " " + LastName; }
现在C#6中
public class User { public string FirstName { get; set; } public string LastName { get; set; } public override string ToString() => string.Format("{0}——{1}", FirstName, LastName); public string FullName => FirstName + " " + LastName; }
3、引用静态类Using Static
在Using中可以指定一个静态类,然后可以在随后的代码中直接使用静态的成员
4、空值判断Null-conditional operators
直接来看代码和运行结果
通过结果可以发现返回的都为null,再也不像以前那样繁琐的判断null勒。
5、字符串嵌入值
在字符串中嵌入值
之前一直使用的方式是
现在我们可以简单的通过如下的方式进行拼接
6、nameof表达式nameof expressions
在方法参数检查时,你可能经常看到这样的代码(之前用的少,这次也算学到了)
public static void AddCustomer(Customer customer) { if (customer == null) { throw new ArgumentNullException("customer"); } }
里面有那个customer是我们手写的字符串,在给customer改名时,很容易把下面的那个字符串忘掉,C#6.0 nameof帮我们解决了这个问题,看看新写法
public static void AddCustomer(Customer customer) { if (customer == null) { throw new ArgumentNullException(nameof(customer)); } }
7、带索引的对象初始化器Index initializers
直接通过索引进行对象的初始化,原来真的可以实现
通过这种方式可以发现字典中只有三个元素,所以也就只有这三个索引可以访问额,其他类型的对象和集合也是可以通过这种方式进行初始化的,在此就不进行一一列举了。
8、异常过滤器 (Exception filters)
先来看一个移植过来的方法
try { var numbers = new Dictionary<int, string> {[7] = "seven",[9] = "nine",[13] = "thirteen" }; } catch (ArgumentNullException e) { if (e.ParamName == "customer") { Console.WriteLine("customer can not be null"); } }
在微软的文档中还给出了另一种用法,这个异常会在日志记录失败时抛给上一层调用者
private static bool Log(Exception e) { ///处理一些日志 return false; } static void Main(string[] args) { try { /// } catch (Exception e){if (!Log(e)) { } } Console.ReadLine(); }
9、catch和finally 中的 await —— Await in catch and finally blocks
在C#5.0中,await关键字是不能出现在catch和finnaly块中的。而在6.0中
try { res = await Resource.OpenAsync(…); // You could do this. … } catch (ResourceException e) { await Resource.LogAsync(res, e); // Now you can do this … } finally { if (res != null) await res.CloseAsync(); // … and this. }
10、无参数的结构体构造函数—— Parameterless constructors in structs
- C#6.0特性(快来围观)
- IT博客大赛,快来围观!【人艰不拆】
- 好消息!快来围观吧!快来!快来!鬼才部落等着你!
- 免费赠送微信公众平台,快来围观...
- 游戏测试怕踩坑?快来围观最佳实践!
- 游戏测试怕踩坑?快来围观最佳实践!
- 特斯拉今年继续涨?快来围观2017股东大会
- 快来吧,我们还能赶上人工智能的前沿!!!快来围观Infer.NET
- 黑马程序员--7期美女发来的感谢信,超级卡哇伊,快来围观啊。
- 【Android网络编程】OkHttp3 最有营养的初级教程,快来围观吧
- Mantle的一个坑被我踩到了,快来围观
- 快来分块 (模拟)
- N黑快围观:690战术核显卡现身
- 收藏,C# WinForm 用override CreateParams 来重载窗体的一些特性(慎用!!!)
- C#6.0 新特性
- C# 6.0新特性
- C#6.0新特性
- c#6.0新特性
- Sping源码解析-源码下载
- C结构体、C++结构体 和 C++类的区别
- java基础---static关键字
- Windows Phone 事件处理
- jstl取纯数字需要加单引号
- C#6.0特性(快来围观)
- Ext JS 5(三)组件
- 设计模式(创建型)之工厂方法模式(Factory Method Pattern)
- Socket实现手机客户端和PC机服务端通信
- 银行家算法问题
- Windows Phone 图片控件
- 新浪微博新增评论带图功能
- 隔行变色
- 北漂人:为什么还要坚守北京