C#7.2 新增功能


C# 7.2 又是一個單點版本,它增添了大量有用的功能。 此版本的一項主要功能是避免不必要的復制或分配,進而更有效地處理值類型。

C# 7.2 使用語言版本選擇配置元素來選擇編譯器語言版本。

01 安全高效的代碼的增強功能

利用 7.2 中引入的語言功能,可在使用引用語義時處理值類型。 它們旨在盡量減少值類型的復制,而不造成與引用類型使用相關的內存分配,進而提升性能。 功能包括:

  • 針對實參的 in 修飾符,指定形參通過引用傳遞,但不通過調用方法修改。 將 in 修飾符添加到參數是源兼容的更改
  • 針對方法返回的 ref readonly 修飾符,指示方法通過引用返回其值,但不允許寫入該對象。 如果向某個值賦予返回值,則添加 ref readonly 修飾符是源兼容的更改。 將 readonly 修飾符添加到現有的 ref 返回語句是不兼容的更改。 它要求調用方更新 ref 本地變量的聲明以包含 readonly 修飾符。
  • readonly struct 聲明,指示結構不可變,且應作為 in 參數傳遞到其成員方法。 將 readonly 修飾符添加到現有的結構聲明是二進制兼容的更改
  • ref struct 聲明,指示結構類型直接訪問托管的內存,且必須始終分配有堆棧。 將 ref 修飾符添加到現有 struct 聲明是不兼容的更改。 ref struct 不能是類的成員,也不能用於可能在堆上分配的其他位置。

可以在編寫安全高效的代碼中詳細了解所有這些更改。

02 非尾隨命名參數

方法調用現可使用位於位置參數前面的命名參數(若這些命名參數的位置正確)。 有關詳細信息,請參閱命名參數和可選參數

03 數值文字中的前導下划線

C# 7.0 中實現了對數字分隔符的支持,但這不允許文字值的第一個字符是 _。 十六進制文本和二進制文件現可以 _ 開頭。例如: 

int binaryValue = 0b_0101_0101;
04 private protected 訪問修飾符

新的復合訪問修飾符:private protected 指示可通過包含同一程序集中聲明的類或派生類來訪問成員。 雖然 protected internal 允許通過同一程序集中的類或派生類進行訪問,但 private protected 限制對同一程序集中聲明的派生類的訪問。

有關詳細信息,請參閱語言參考中的訪問修飾符

05 條件 ref 表達式
條件表達式可能生成 ref 結果而不是值。 例如,你將編寫以下內容以檢索對兩個數組之一中第一個元素的引用:
ref var r = ref (arr != null ? ref arr[0] : ref otherArr[0]);

變量 r 是對 arr 或 otherArr 中第一個值的引用。

有關詳細信息,請參閱語言參考中的條件運算符 (?:)

 


免責聲明!

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



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