C# init用法
阿新 • • 發佈:2021-10-11
動機
自1.0 以來,用 c # 生成不可變資料的基礎機制並未更改。 它們仍保留:
1.將欄位宣告為 readonly 。
2. 宣告僅包含 get 訪問器的屬性。
這些機制在允許構造不可變的資料時有效,但它們通過向型別的樣板程式碼新增成本並從物件和集合初始值設定
項的功能中選擇此類型別來實現此目的。 這意味著開發人員必須在易用性和不可變性之間進行選擇。
像宣告型別一樣,簡單的不可變物件(例如 Point )需要兩個樣板板程式碼,以支援構造。 型別越大,此樣板板式的
成本就越大:
說這麼廢話我們直接編譯以下程式碼然後檢視IL程式碼:
public string Name { get; init; }public string Bame { get; set; } public readonly string com; static void Main(string[] args) { } //以上程式碼Name屬性 類似於以下程式碼功能 : public string Name { get; private set; } public A(string b) { Name = b; }
init做屬性(索引)訪問器代替set訪問器時候 IL set_name()方法多出了modreq([System.Runtime]System.Runtime.CompilerServices.IsExternalInit) 簽名