![](/img/trans.png)
[英]Why not explicitly initialized readonly autoimplemented property is valid in c# 6?
[英]C# abstract property that can be initialized in constructor but readonly afterwards?
在一個班級我有一個財產
protected abstract string test{ get; }
當我嘗試在構造函數中初始化它時。 我收到一條錯誤消息:
無法分配屬性或索引器 xxx。 ——它是只讀的。
有沒有辦法允許某些財產
您可能不想要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.