C# 6 与 .NET Core 1.0 高级编程 - C# 6 改进
个人原创译文,转载请注明出处。有不对的地方欢迎指出与交流。
英文原文:Professional C# 6 and .NET Core 1.0 - What’s New in C# 6
C# 6 改进
新的C #编译器可以编译C # 6 。这个新的编译器不仅是已完成代码清理;编译器流水线的特征也可以在自定义程序中使用,这些特征同时也应用在的Visual Studio的功能里。
新的编译平台可以提高C #许多新特征.虽然没有类似LINQ或异步特征关键字的影响力,但许多增强的功能确实提高了开发者生产力。C # 6的变化都有哪些?
静态引用
静态引用声明允许没有静态方法类名的调用:
C# 5:
using System;
// etc.
Console.WriteLine("Hello,World!");
C# 6
using static System.Console;
// etc.
WriteLine("Hello,World");
using static关键字将会在第2章提到,“Core C #.”
表达式方法
使用表达式方法时,可以用只包含一个语句的lambda表达式语法:
C# 5
public boolIsSquare(Rectangle rect)
{
return rect.Height == rect.Width;
}
C# 6
public boolIsSquare(Rectangle rect) => rect.Height == rect.Width;
表达式方法将在第3章提到, 关键字“Objects and Types.”
表达式属性
类似表达式方法, get 属性访问器仅一行lambda语法就可以完成:
In C# 5
public string FullName
{
get
{
return FirstName +"" + LastName;
}
}
In C# 6
public string FullName=> FirstName +"" + LastName;
表达式属性将在第3章提到.
自动实现的属性设定项
自动实现的属性可以通过属性设定项进行初始化:
In C# 5
public class Person
{
public Person()
{
Age = 24;
}
public int Age {get; set;}
}
In C# 6
public class Person
{
public int Age {get; set;} = 42;
}
自动初始化的属性设定项将在第3章提到。
只读自动属性
实现只读属性,C # 5中要求全属性语法。但在C # 6,您可以使用自动实现的属性:
C# 5
private readonly int_bookId;
public BookId
{
get
{
return _bookId;
}
}
C# 6
public BookId {get;}
只读自动属性将在第3章提到。
nameof 运算符
利用新的nameof 运算符,字段名称、属性、方法或类型均可被访问。这样即使重构也不必考虑遗漏名称更改的问题:
C# 5
public void Method(objecto)
{
if (o == null) throw newArgumentNullException("o");
C# 6
public void Method(objecto)
{
if (o == null) throw newArgumentNullException(nameof(o));
nameof 运算符将在第 8章提到,关键字 “Operators and Casts.”
Null 空指针传递运算符
null 空指针传递运算符可以简化空指针检查:
C# 5
int? age = p == null ?null : p.Age;
C# 6
int? age = p?.Age;
新的语法在触发事件中也有优势:
In C# 5
var handler = Event;
if (handler != null)
{
handler(source, e);
}
In C# 6
handler?.Invoke(source,e);
空指针传递运算符将在第8章中提到。
字符串插值
字符串插值消除调用string.Format。占位参数可以包含在表达式中则不必在string里利用数字占位进行格式化:
In C# 5
public override ToString()
{
return string.Format("{0}, {1}",Title, Publisher);
}
In C# 6
public override ToString()=> $"{Title} {Publisher}";
以上C # 6的示例比C # 5语法简化太多,因为它不仅使用字符串插值,而且使用了表达式方法。
字符串插值也可以使用字符串格式,并在分配可格式化的字符串时有特殊的功能。
字符串插值将在第10章担任,关键字“字符串和正则表达式。”
字典预设器
字典可以使用一个类似集合预设器的字典预设器进行初始化。
In C# 5
var dict = newDictionary<int, string>();
dict.Add(3,"three");
dict.Add(7,"seven");
In C# 6
var dict = newDictionary<int, string>()
{
[3] ="three",
[7] ="seven"
};
字典预设器将在第11章提到,关键字 “Collections.”
异常过滤器
异常筛选器允许在捕获异常之前筛选异常。
In C# 5
try
{
//etc.
}
catch (MyException ex)
{
if (ex.ErrorCode != 405) throw;
// etc.
}
In C# 6
try
{
//etc.
}
catch (MyException ex)when (ex.ErrorCode == 405)
{
// etc.
}
新语法的优势不仅在于它减少了代码长度,同时堆栈跟踪是不可改变的,这在C # 5中可能发生变化。
在第14章中,“错误和异常”覆盖了异常过滤器。
等待捕捉
可以在catch子句中使用关键字await。而在C # 5需要在外层的代码块中才能使用。
In C# 5
bool hasError = false;
string errorMessage =null;
try
{
//etc.
}
catch (MyException ex)
{
hasError = true;
errorMessage = ex.Message;
}
if (hasError)
{
await newMessageDialog().ShowAsync(errorMessage);
}
In C# 6
try
{
//etc.
}
catch (MyException ex)
{
await newMessageDialog().ShowAsync(ex.Message);
}
此特征不需要C #语法增强;这个功能目前是可用的。这种增强需要微软大量的投资来使它的工作,但与你使用这个平台没有关系。从两个版本的对比可以看出对于开发者来说,代码会越来越少。
注 请注意新的C # 6语言特点都包含在上述提到的章节,但本书所有章节都会使用新的C #语法。
C# 6 与 .NET Core 1.0 高级编程 - C# 6 改进的更多相关文章
- C# 6 与 .NET Core 1.0 高级编程 - 37 章 ADO.NET
译文,个人原创,转载请注明出处,有不对的地方欢迎指出与交流. 英文原文:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET --------------- ...
- C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...
- C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...
- C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)),不对的地方欢迎指出与交流. 章节出自<Professional C ...
- C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(下)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(下)),不对的地方欢迎指出与交流. 章节出自<Professional C ...
- C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章 ASP.NET Core(上)),不对的地方欢迎指出与交流. 章节出自<Professiona ...
- C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(下)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章 ASP.NET Core(下)),不对的地方欢迎指出与交流. 章节出自<Professiona ...
- C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...
- C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...
随机推荐
- myeclipse设置以及快捷键
http://blog.csdn.net/anxin323/article/details/40214467 如何查看jar包里的源码和doc文档? 1. jar文件右键properties--jav ...
- C程序编译执行过程
C程序编译执行过程 认识C编译执行过程,是C学习的开端. 简单说C语言从编码编译到执行要经历一下过程: C源代码 编译---->形成目标代码,目标代码是在目标机器上运行的代码. 连接-- ...
- iOS推送的众多坑
新来的一家公司,昨天和同事解决推送问题(工程里有集成百度推送和环信即时通讯),信誓旦旦的声称:" app在前台和后台运行时,推送触发的是didReceiveRemoteNotificatio ...
- 五、pig学习
一.什么是pig 1.pig和sql.map-reduce的关系 来自为知笔记(Wiz)
- 12、手把手教你Extjs5(十二)执行菜单命令在tabPanel中显示模块
上面设计好了一个模块的主界面,下面通过菜单命令的执行来把这个模块加入到主界面当中.在MainModule.js中有一个函数,生成了当前的菜单数据: // 根据data.systemMenu生成菜单条和 ...
- FZU 2098 刻苦的小芳
这个问题转化一下就是求长度为2*n的正确括号匹配串,两个匹配的括号之间的距离不超过2*k的有几种. 假设左括号为1,右括号为-1,dp[i][j]表示长度为i的括号匹配串,前缀和为j的有几种.dp[2 ...
- 安装ARM交叉编译器
1.开发平台 虚拟机:VMware 12 操作系统:Ubuntu 14.04 64bit 2.准备ARM交叉编译工具包 编译uboot和linux kernel都需要ARM交叉工具链支持,这里使用Li ...
- Linux内核配置浅析
1.Linux Kernel Kconfig系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1>.Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Li ...
- php 三大特点:封装,继承,多态
一.封装 目的:让类更安全 做法:成员变量变为私有的,通过方法间接操作成员变量,在方法里面加限制条件 二.继承 概念:子类可以继承父类的一切 方法重写:在子类里面对父类进行方法重写 特点:单继承:一个 ...
- FlexGrid简单demo
1.首先加入以下代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...