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章“对象和类型”中讨论
表达式属性
类似表达式方法,
单行属性只有一个getaccessor ,可以用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 = ;
}
public int Age {get; set;}
}
In C# 6
public class Person
{
public int Age {get; set;} = ;
}
自动初始化的属性预设器将在第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 空指针传递运算符可以简化空指针检查:
C# 5
int? age = p == null ?null : p.Age;
C# 6
int? age = p?.Age;
新的语法在触发事件中也有优势:
在 C# 5
var handler = Event;
if (handler != null)
{
handler(source, e);
}
在 C# 6
handler?.Invoke(source,e);
空指针传递运算符将在第8章中讨论。
字符串插值
字符串插值消除调用string.Format。占位参数可以包含在表达式中则不必在string里利用数字占位进行格式化:
在 C# 5
public override ToString()
{
return string.Format("{0}, {1}",Title, Publisher);
}
在 C# 6
public override ToString()=> $"{Title} {Publisher}";
与C # 5语法相比,以上C # 6的示例简化了很多,因为它不仅使用字符串插值,使用了表达式方法。
字符串插值也可以使用字符串格式,并在分配可格式化的字符串时有特殊的功能。
字符串插值将在第10章“字符串和正则表达式”讨论
字典初始化程序
字典可以使用一个类似集合预设器的字典预设器进行初始化。
在 C# 5
var dict = newDictionary<int, string>();
dict.Add(,"three");
dict.Add(,"seven");
在C# 6
var dict = newDictionary<int, string>()
{
[] ="three",
[] ="seven"
};
字典预设器将在第11章提 “集合”中讨论。
异常过滤器
异常筛选器允许在捕获异常之前对其进行过滤。
在C# 5
try
{
//etc.
}
catch (MyException ex)
{
if (ex.ErrorCode != ) throw;
// etc.
}
In C# 6
try
{
//etc.
}
catch (MyException ex)when (ex.ErrorCode == )
{
// etc.
}
新语法的一大优点不仅在于它减少了代码长度,同时堆栈跟踪没有改变可改变的,这在C # 5中可能发生变化。
异常过滤器在第14章“错误和异常”讨论。
等待捕捉
可以在catch子句中使用关键字await。而在C # 5需要在外层的代码块中才能使用。
在 C# 5
bool hasError = false;
string errorMessage =null;
try
{
//etc.
}
catch (MyException ex)
{
hasError = true;
errorMessage = ex.Message;
}
if (hasError)
{
await newMessageDialog().ShowAsync(errorMessage);
}
在 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# ...
随机推荐
- Unity Obstacle分析
NavMeshObstacle Normal 通过设置半径和高度来设定障碍物,配合NavMesh使用. 优点: 简单易用,效率高 动态生成 缺点: 可能会被主角穿过,但目前没发现 形状固定为圆柱 Na ...
- BZOJ3083 遥远的国度 【树链剖分】
BZOJ3083 遥远的国度 Description zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcw ...
- CALayer2-创建新的层
本文目录 一.添加一个简单的图层 二.添加一个显示图片的图层 三.为什么CALayer中使用CGColorRef和CGImageRef这2种数据类型,而不用UIColor和UIImage? 四.UIV ...
- mfc 鼠标、键盘响应事件
一.基本目标 1.有一个基本的MFC程序,点击“关闭”则“关闭”这个程序,这点没什么好讲的,把自带的“取消”按钮,右键->属性的Caption改成“关闭”二字就可以了 2.鼠标在对话框中移动,则 ...
- MySQL中大数字加减,不产生千位符和科学计数
mysql数字加减科学计数法 这两天因为需求,需要获取一张表的流水号.规则是这样的.当前日期+8位流水号.比如:2015062400000001,2015062400000002,2015062400 ...
- spring注解实现业务层事务管理,当业务层自调用时,事务失效问题解决
前些日子一朋友在需要在目标对象中进行自我调用,且需要实施相应的事务定义,且网上的一种通过BeanPostProcessor的解决方案是存在问题的.因此专门写此篇帖子分析why. 1.预备知识 aop概 ...
- Spring Cloud微服务框架介绍
Spring Cloud为开发人员提供了一整套的快速构建分布式应用的工具,入服务注册.服务发现.熔断.负载均衡.路由等,提供了开箱即用的各种依赖以及良好的可扩展机制. 目前在Spring Cloud的 ...
- Clion + opencv环境搭建(体验最好的C++ IDE)
前言: 一个好的开发环境,是程序猿梦寐以求的,对于opencv的开发,一直觉得vs虽然牛逼但太庞大,所以后来用了codeblocks,然后又觉得无论是vs还是codeblocks都不够美观,代码提示也 ...
- Java类型强制转换
int intA = 10; String StrB = "12"; int c = Integer.parseInt(StrB); // 把String转换成int String ...
- 引用 LPSTR、LPCSTR、LPTSTR、LPCTSTR、LPWSTR及LPCWSTR的意义及区别
1.ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式.ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节. 2.Unicode:用两个字节表示一个字符 ...