编写此篇文章目的作为个人学习的一个笔记和总结
0.1 .NET Core 的世界
- .Net Core是开源的
- 可以在Windows和linux上使用
- 并且使用现代模式。
- 支持在多个平台上开发
0.2 C#的重要性
C#不仅作为面向对象的通用编程语言,而且是一种基于组件的编程语言,支持属性、 事 件,特性(注解),和构建程序集(包括元数据的二进制文件)
0.3 C# 7 的新特性
C# 6 扩展包括static using、基于表达式的方法和属性、自动实现的属性初始化器、只读自动属性、nameof操作符、空条件运算符、字符串插入、字典初始化器、异常过滤器以及catch中等待
C# 7 的新特性:
0.3.1 数字分隔符 -
0.3.2 二进制字面值
0.3.2 表达式体的成员
0.3.4 out 变量
C# 7 之前 out变量必须在使用前声明,而在C#7中变量可以在使用时声明
0.3.5 不拖尾的命名参数
0.3.6 只读结构(底3章介绍)
0.3.7 in 参数
给参数使用in关键字,这就保证了传递的值类型不会更改,并可以通过引用来传递,以避免复制:
static void CantChange(in AStruct s)
{
// s can't chage
}
0.3.8 Private Protected
Protected internal : 同一程序集或派生类可以访问
Private protected : 当类派生自基类并且位于同一程序集时才可访问
0.3.9 目标类型的 Defaul
在 C# 7.1 中,定义了defaul 字面值,与defaul 操作符相比,它允许使用更短的语法。Default操作符总是需要类型的重复,现在不再需要了。这适用于复杂类型:
C# 7.0
int x = defaul(int);
C# 7.2
int x = defaul;
0.3.10 本地函数
在C# 7 中,可以在方法中声明一个本地函数。本地函数只能在方法的作用域内访问:
C# 6
public void someFunStuff()
{
//使用委托 和 拉姆达表达式创建
Func<int,int,int> add = (x,x) => x+y;
}
C# 7 可以在方法中声明一个本地函数
public void someFunStuff()
{
int add (int x, int y) => x+y;
}
0.3.11 元组
在C# 7之前元组是.Net Framework 中的 Tuple 类,可以通过Item1,Item2,Item3等访问元组的成员 ,在C#7 中可以定义元组的成员
C# 6
var tuple=Tuple.Create(42,"astring");
tuple.Item1;
tuple.Item2;
C# 7
var tuple(n:42,s:"magic");
tuple.n;
tuple.s;
0.3.12 推断元组名
C# 7.1 通过自动推断元组名称来扩展元组,类似于匿名类型。在C#7.0中,元组的成员总是需要命名。如果元组的成员的名称应该与分配给他的属性或字段相同,那么在C#7.1中,元组不提供名称,它就与分配给她的成员的名称相同:
C# 7.0
var t1=(FirstName:racer.FirstName,Wins:racer.Wins);
int wins=t1.Wins);
C# 7.1
var p1=(racer.FirstName,racer.Wins);
int wins=t1.Wins;
0.3.13 拆解
元组可以拆解成独立得变量,例如:
C# 7
(int n, string s)=(42,",magic");
//如果定义了Deconstruct方法,也可以拆解Person对象:
C# 7
var p1 = new Person("Tom","Turbo");
(string firstName,string lastNeme)=p1;
拆解在第13章
0.3.14 模式匹配
使用匹配模式,is 操作符和switch语句增强为三种模式:const 模式,类型模式和var 模式。
匹配模式在第13章介绍
0.3.15 Throw 表达式
抛出异常只有在语句中才可行,在表达式中是不可行的。当使用构造函数接受参数时,需要对null进行额外得检查,才能抛出ArgumentNullException
在14章中介绍
0.3.16 异步Main()方法
在C# 7 之前 Main方法总是需要声明为类型void。 在C# 7.1中,Main()方法也可以是Task 类型,使用async 和 await关键字:
C# 7.0
static void Main()
{
SomeMethodAsync();
}
async static Task Main()
{
await SomeMethodAsync();
}
异步在第15章介绍
0.3.17 引用语句
TPL 任务并行库