簡體   English   中英

如何使用通用getter和setter設置只讀屬性的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM