Dot-Net

C# 3.0 對像初始化中的私有設置器屬性

  • May 28, 2020

如果我有以下程式碼:

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" 
};

在此處查看更多詳細資訊。

不,沒有辦法做到這一點。對像初始化器只允許您訪問在初始化器之外可以訪問的欄位和屬性。

您最好的選擇是使用顯式設置這些屬性的建構子。

引用自:https://stackoverflow.com/questions/1121848