[英]How to set the value of a read-only property with generic getters and setters?
不確定我是否正確說明了這一點......但我有以下代碼:
public Guid ItemId
{
get;
}
public TransactionItem()
{
this.ItemId = Guid.Empty;
}
當然我得到一個只讀的問題......我明白了。 無論如何設置此屬性值而不必執行以下操作:
Guid _itemId = Guid.Empty;
public Guid ItemId
{
get
{
return _itemId;
}
set
{
_itemId = value;
}
}
要么
public Guid ItemId
{
get;
internal set;
}
提前致謝!
我會這樣做:
public Guid ItemId
{
get;
private set; // can omit as of C# 6
}
public TransactionItem()
{
this.ItemId = Guid.Empty;
}
當然,在本課程中設置它是開放的,但是既然你正在編寫它,我希望你有理由不打破你自己的意圖......
在我看來,從外面看,像readonly屬性這樣的東西最重要。 從內到外,它並不重要,因為那里,你是國王=)
如果您只需要ItemId
屬性對您的類的外部用戶是只讀的,那么Svish的答案是要走的路。
如果您需要ItemId
在類本身內是只讀的,那么您需要執行以下操作:
private readonly Guid _ItemId
public Guid ItemId
{
get { return _ItemId; }
}
public TransactionItem()
{
_ItemId = Guid.Empty;
}
您可以使用readonly關鍵字
public readonly Guid ItemId;
public TransactionItem()
{
this.ItemId = Guid.Empty;
}
我擔心你的問題不是很明確 - 但是如果沒有定義屬性設置器,那么你當然不能稱之為。
你實際上是在一個自動實現的只讀屬性之后,允許在構造函數中進行設置嗎? 如果是這樣,我恐怕沒有,就像我喜歡的那樣。
只是到了我的意思擴大,我希望能夠做到:
// Not valid in C# - yet!
public class Foo
{
// Autogenerated field would be readonly in IL.
public string Name { get; readonly set; }
public Foo (string name)
{
this.Name = name;
}
public void Bar()
{
// This would be invalid
this.Name = "No!";
}
}
基本上它將是“使一個屬性像一個只讀字段。”
使用私有的setter,還是設置支持字段?
(但是,您必須確保可以根據屬性名稱確定支持字段的名稱。
例如,確保您的支持字段始終與property-name具有相同的名稱,但前綴為下划線; 就像NHibernate
使用其訪問策略一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.