Dot-Net
C# 3.0 對像初始化中的私有設置器屬性
如果我有以下程式碼:
public class MyClass { public string myName { get; private set; } public string myId { get; set; } }為 setter 創建了一個私有的編譯器生成的變數。我希望設置器不能僅用於對像初始化。但是,我如何開始設置 myName 變數?
閱讀對像初始化我發現以下內容:
…它是只讀的,表示底層儲存的私有欄位具有編譯器生成的名稱,我們不能在建構子中使用它來分配給它。解決方案是使用
$$ … $$對像初始化器
那麼,解決方案是使用:
MyClass mc = new MyClass { myName = "What ever", myId = "1234" };但這最終導致編譯器錯誤說:
無法在此上下文中使用屬性或索引器“MyClass.MyClass.myName”,因為 set 訪問器不可訪問
那麼,有沒有辦法使用對像初始化來設置這個值呢?如果有,正確的方法是什麼?
從C# 9.0開始,您可以使用
init訪問器,它允許您僅在初始化期間設置屬性值。宣言:
public class MyClass { public string myName { get; init; } public string myId { get; set; } }對像初始化將使用此配置:
MyClass mc = new MyClass { myName = "What ever", myId = "1234" };在此處查看更多詳細資訊。
不,沒有辦法做到這一點。對像初始化器只允許您訪問在初始化器之外可以訪問的欄位和屬性。
您最好的選擇是使用顯式設置這些屬性的建構子。