color: #ff0000">一、只读自动属性(Read-only auto-properties)
C# 6之前我们构建只读自动属性:
public string FirstName { get; private set; }
public string LastName { get; private set; }
原理解析:就是编译器在生成set访问器时,它的修饰符是private,由上可知所谓的只读只是针对类外部,在类内部还是可以随意修改属性值的。
C# 6中提供了真正的只读自动属性,写法如下:
public string FirstName { get; }
public string LastName { get; }
原理解析:首先编译器会生成一个readonly的私有字段而get访问器就是返回该字段的值,由上可知该只读自动属性只能在构造函数中为其赋值。
二、自动属性初始化器(Auto-Property Initializers)
以前自动属性的赋值操作我们只能写在方法中,如构造函数:
public Student(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
但在C# 6中我们可以把赋值操作当作声明的一部份,如下所示:
public string FirstName { get; set; } = "Corleone";
public string LastName { get; set; } = "Mike";
备注:其实C# 6和之前的版本都一样赋值操作最终都是在方法中完成,但后者明显更简洁直观,所以这是个不错的语法糖。
三、函数成员的表达式体(Expression-bodied function members)
C# 6中提供的一个新语法:对于只有一条语句的方法体可以简写成表达式。如下面两种情况:
1. 方法(Methods)
public Student Create() => new Student();
等同于:
public Student Create()
{
return new Student();
}
2. 只读属性(read only properties)
public string FullName => string.Format("{0},{1}", FirstName, LastName);
等同于:
public string FullName
{
get
{
return string.Format("{0},{1}", FirstName, LastName);
}
}
原理解析:上面的表达式在编译后会生成最原始的方法体和访问器,值得一提的是函数表达式体跟Lambda是两个相似但不相同的东西,函数的表
达式体只能带一句话且不能包含return关键字但Lambda 能带语句块和包含关键字。
四、使用静态(using static)
C# 6中的一个新语法:使用类型的静态成员时可以省略其类型,如下所示:
using static System.String; // 先导入对应成员类型
public bool IsNull(string str) => IsNullOrEmpty(str);
等同于:










