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 = 24;
  }
  public int Age {get; set;}
}

 In C# 6 

public class Person
{
  public int Age {get; set;} = 42;
}

 自動初始化的屬性預設器將在第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(3,"three");
dict.Add(7,"seven");

 在C# 6

var dict = newDictionary<int, string>()
{
  [3] ="three",
  [7] ="seven"
};

 字典預設器將在第11章提 “集合”中討論。 

異常過濾器

異常篩選器允許在捕獲異常之前對其進行過濾。 

在C# 5 

try
{
  //etc.
}
catch (MyException ex)
{
  if (ex.ErrorCode != 405) throw;
  // etc.
}

 In C# 6 

try
{
  //etc.
}
catch (MyException ex)when (ex.ErrorCode == 405)
{
  // 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 #語法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM