C# 7.0 核心技术指南 (8):C#和.NET Framework 简介 1.8.2

阅读数:6 2019 年 11 月 30 日 23:15

C# 7.0核心技术指南(8):C#和.NET Framework简介 1.8.2

(C# 6.0 新特性)

内容简介
本书前三章将集中介绍 C#语言。首先介绍基本的语法、类型和变量。而后会介绍一些高级的特性,如不安全代码以及预处理指令。如果你是 C#语言的初学者,请循序渐进地阅读这些章节。
其余各章则涵盖了.NET Framework 的核心功能,包括 LINQ、XML、集合、并发、I/O 和网络、内存管理、反射、动态编程、特性、安全、应用程序域和原生互操作性等主题。第 6 章和第 7 章是后续主题的基础,除这两章之外,其余各章可以按照需要以任何顺序阅读。LINQ 相关的三个章节好按顺序阅读。其中的一些章节需要一些并发相关的知识,这些知识将在第 14 章中介绍。

随 Visual Studio 2015 一起发布的 C# 6.0 采用了下一代的,完全使用 C#编写的编译器,即“Roslyn”项目。新的编译器将一整条编译流水线通过程序库进行开放,使得对各种源代码进行分析成为可能(见第 27 章)。编译器本身是开源的,可以从 github.com/dotnet/roslyn 获得其源代码。

此外,C# 6.0 为了改善代码的清晰性引入了一系列小而精的改进。

null 条件(“Elvis”)运算符(请参见 2.10 节)可以避免在调用方法或访问类型的成员之前显式地编写用于 null 判断的语句。在以下示例中,result 将会为 null 而不会抛出 NullReferenceException:

复制代码
System.Text.StringBuilder sb = null;
string result = sb?.ToString(); // result is null

表达式体函数(expression-bodied function)(请参见 3.1.2 节)可以以 Lambda 表达式的形式书写仅仅包含一个表达式的方法、属性、运算符以及索引器,使代码更加简短:

复制代码
public int TimesTwo (int x) => x * 2;
public string SomeProperty => "Property value";

属性初始化器(property initializer,参见第 3 章)可以对自动属性进行初始赋值:

复制代码
public DateTime TimeCreated { get; set; } = DateTime.Now;

这种初始化也支持只读属性:

复制代码
public DateTime TimeCreated { get; } = DateTime.Now;

只读属性也可以在构造器中进行赋值,这令创建不可变(只读)类型变得更加容易了。

索引初始化器(index initializer)(见第 4 章)可以一次性初始化具有索引器的任意类型:

复制代码
var dict = new Dictionary<int,string>()
{
[3] = "three",
[10] = "ten"
};

字符串插值(string interploation)(参见 2.6.2 节)用更加简单的方式替代了 string.Format:

复制代码
string s = $"It is {DateTime.Now.DayOfWeek} today";

异常过滤器(exception filters)(请参见 4.5 节)可以在 catch 块上再添加一个条件:

复制代码
string html;
try
{
html = new WebClient().DownloadString ("http://asef");
}
catch (WebException ex) when (ex.Status == WebExceptionStatus.Timeout)
{
...
}

using static(参见 2.12 节)指令可以引入一个类型的所有静态成员,这样就可以不用书写类型而直接使用这些成员:

复制代码
using static System.Console;
...
WriteLine ("Hello, world"); // WriteLine instead of Console.WriteLine

nameof(见第 3 章)运算符返回变量、类型或者其他符号的名称。这样在 Visual Studio 中就可以避免变量重命名造成不一致的代码:

复制代码
int capacity = 123;
string x = nameof (capacity); // x is "capacity"
string y = nameof (Uri.Host); // y is "Host"

最后值得一提的是,C# 6.0 可以在 catch 和 finally 块中使用 await。

C# 7.0核心技术指南(8):C#和.NET Framework简介 1.8.2

购书地址 https://item.jd.com/12681788.html?dist=jd

评论

发布