C# required 關鍵字

如果要在類別建立時確保屬性資料有被賦值/初始化,那就需要寫在建構子中要求傳入參數:
    
    public class User
    {
        public User(int id, string name)
        {
            Id = id;
            Name = name;
        }

        public int Id { get; set; }
        public string Name { get; set; }
    }
    

這樣在實例化物件時就需要帶入這些參數才可以建立物件:
    
        var user = new User(1, "Ruyut");
    

但是當有多個建構子時每個都需要帶入這個兩個參數,非常麻煩,並且也沒有辦法調整建構子傳入參數的順序。

在 C# 11 中新增了必須成員(required members),在類別(class)或是結構(struct)中只要加上 required 關鍵字就會強制要求在建立時給定初始值:
    
    public class User
    {
        public required int Id { get; set; }
        public required string Name { get; set; }
    }
    

在實例化物件時如果沒有將標記為 required 的屬性設定初始值時就會顯示錯誤訊息,無法執行:
    
var user = new User();

// Required member 'User.Id' must be set in the object initializer
// Required member 'User.Name' must be set in the object initializer
    

可以使用下面的方式在實例化物件時指定初始值:
    
        var user = new User()
        {
            Id = 1,
            Name = "Ruyut",
        };
    

並且相比於一開始示範的使用建構子處理的方式,我們可以使用不同的順序賦值:
    
        var user2 = new User()
        {
            Name = "小明",
            Id = 2,
        };
    



參考資料:
Microsoft.Learn - Required Members
Microsoft.Learn - required modifier (C# Reference)
Microsoft.Learn - What's new in the .NET 8 runtime
JetBrains Blog - Required Keyword, Checked Operators, nameof Operator Scope – Using C# 11 in Rider and ReSharper
JetBrains Guide - C# 11 - Required Keyword

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com