在课堂上我有一个财产
protected abstract string test{ get; }
当我尝试在构造函数中初始化它时。我收到一条错误消息:
属性或索引器xxx无法分配给。 -它是只读的。
有没有办法允许某些财产成为
答案 0 :(得分:2)
您可能不希望拥有abstract
属性。仅当您要强制派生类提供自定义实现时,才使用它。就您而言,您只希望在构造函数和readonly
中进行设置。
public abstract class Bar
{
protected string Test { get; }
public Bar(string test)
{
Test = test;
}
}
public class Foo : Bar
{
public Foo() : base("It Works!")
{ }
}
答案 1 :(得分:0)
在派生类中使用私有设置器简单地实现抽象方法:
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; } }
}
这允许您为不同的类设置不同的值。如果您不需要它,并且所有类都应具有完全相同的值,则可以在基类中定义它,以使其成为非抽象类。
您还可以在派生类中使用私有设置器。这使其对其他类只读,但是您也可以在构造函数之外的类中设置值。