C# 7.2 又是一個單點版本,它增添了大量有用的功能。 此版本的一項主要功能是避免不必要的復制或分配,進而更有效地處理值類型。
C# 7.2 使用語言版本選擇配置元素來選擇編譯器語言版本。
利用 7.2 中引入的語言功能,可在使用引用語義時處理值類型。 它們旨在盡量減少值類型的復制,而不造成與引用類型使用相關的內存分配,進而提升性能。 功能包括:
- 針對實參的
in
修飾符,指定形參通過引用傳遞,但不通過調用方法修改。 將in
修飾符添加到參數是源兼容的更改。 - 針對方法返回的
ref readonly
修飾符,指示方法通過引用返回其值,但不允許寫入該對象。 如果向某個值賦予返回值,則添加ref readonly
修飾符是源兼容的更改。 將readonly
修飾符添加到現有的ref
返回語句是不兼容的更改。 它要求調用方更新ref
本地變量的聲明以包含readonly
修飾符。 readonly struct
聲明,指示結構不可變,且應作為in
參數傳遞到其成員方法。 將readonly
修飾符添加到現有的結構聲明是二進制兼容的更改。ref struct
聲明,指示結構類型直接訪問托管的內存,且必須始終分配有堆棧。 將ref
修飾符添加到現有struct
聲明是不兼容的更改。ref struct
不能是類的成員,也不能用於可能在堆上分配的其他位置。
可以在編寫安全高效的代碼中詳細了解所有這些更改。
方法調用現可使用位於位置參數前面的命名參數(若這些命名參數的位置正確)。 有關詳細信息,請參閱命名參數和可選參數。
C# 7.0 中實現了對數字分隔符的支持,但這不允許文字值的第一個字符是 _
。 十六進制文本和二進制文件現可以 _
開頭。例如:
int binaryValue = 0b_0101_0101;
新的復合訪問修飾符:private protected
指示可通過包含同一程序集中聲明的類或派生類來訪問成員。 雖然 protected internal
允許通過同一程序集中的類或派生類進行訪問,但 private protected
限制對同一程序集中聲明的派生類的訪問。
有關詳細信息,請參閱語言參考中的訪問修飾符。
條件表達式可能生成 ref 結果而不是值。 例如,你將編寫以下內容以檢索對兩個數組之一中第一個元素的引用:
ref var r = ref (arr != null ? ref arr[0] : ref otherArr[0]);
變量 r
是對 arr
或 otherArr
中第一個值的引用。
有關詳細信息,請參閱語言參考中的條件運算符 (?:)。