三十分钟快速掌握C# 6.0知识点

2019-12-30 16:44:22刘景俊

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); 

等同于: