簡體   English   中英

可以在構造函數中初始化但之后只讀的 C# 抽象屬性?

[英]C# abstract property that can be initialized in constructor but readonly afterwards?

在一個班級我有一個財產

protected abstract string test{ get; }

當我嘗試在構造函數中初始化它時。 我收到一條錯誤消息:

無法分配屬性或索引器 xxx。 ——它是只讀的。

有沒有辦法允許某些財產

  1. 抽象的
  2. 在 ctor 中初始化后只讀?

您可能不想要abstract屬性。 如果您想強制派生類提供自定義實現,您只會使用它。 在您的情況下,您只希望在構造函數中設置它並readonly

public abstract class Base
{
    protected string MyProperty { get; }

    public Base(string myProperty)
    {
        MyProperty = myProperty;
    }
}

public class Derived : Base
{
    public Derived()
        : base("DefaultValue")
    { }
}

只需在派生類中使用私有設置器來實現abstract方法:

class Derived : Base
{
    protected override string test { get; } = "MyInitialValue";
}

or before C#6 with a readonly backing-field:

class Derived : Base
{
    private readonly string _test = "MyInitialValue";
    protected override test { get { return this._test; } }
}

這使您可以為不同的類設置不同的值。 如果您不需要它,並且所有類都應具有完全相同的值,則可以在基類中定義它,以使其成為非抽象的。

您還可以在派生類中使用私有設置器。 這使其對其他類只讀,但您也可以在構造函數之外的類中設置值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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