【发布时间】:2011-03-24 14:12:20
【问题描述】:
我在基本抽象类中有一个字段。我想将此字段设置为只读,以便在初始化子类后其值不会更改。
但是抽象类不能有构造函数,只读只能从构造函数初始化。
如何做到这一点?
【问题讨论】:
我在基本抽象类中有一个字段。我想将此字段设置为只读,以便在初始化子类后其值不会更改。
但是抽象类不能有构造函数,只读只能从构造函数初始化。
如何做到这一点?
【问题讨论】:
例如,您可以像这样从子类构造函数调用基类的构造函数:
基类中的只读字段和构造函数:
public readonly int MyInt;
protected TheBaseClass(int myInt)
{
this.MyInt = myInt;
}
子类中的构造函数:
public TheChildClass() : base(42)
{
}
public TheChildClass(int i) : base(i)
{
}
【讨论】:
public TheChildClass(int i) : base(i) { ... }
abstract 类可以有构造函数。
public abstract class MyAbstract
{
protected readonly string SomeField;
public MyAbstract()
{
SomeField = "Some";
}
}
public abstract class MyInheited
{
public MyInheited(): base()
{
}
}
如果我是你,我会拥有字段不是只读受保护字段,而是将其公开为公共只读属性
【讨论】:
protected readonly 字段的完全正当理由。例如。想要在服务层的 API 中隐藏 DbContext 对象。
抽象类可以有一个构造函数,它们根本不能被初始化。
【讨论】: