在抽象类中有一个构造函数是否很好?
创建抽象类的构造函数是一个很好的编程实践吗?由于抽象类不能被初始化,所以它们的子类被初始化.
以下是我的课堂结构.
- public abstract class Scheduler
- {
- private Storyboard timer;
- protected Scheduler()
- {
- // initialize the timer here.
- timer = new Storyboard();
- this.PollInterval = 60;
- }
- }
- public class TaskScheduler : Scheduler
- {
- public TaskScheduler()
- : base()
- {
- }
- }
解决方法
是的,这是非常好的.只是因为构造函数只能由派生类调用并不意味着它不会有用.例如,您可能有一个抽象类,它表示某种命名实体 – 将该名称作为构造函数参数是有意义的.
这可能值得使构造函数受到保护,使得更加明显的是,您不能仅仅从别处调用它.
请注意,抽象类中有一个构造函数(或多个构造函数)会强制派生类构造函数通过它,但不会强制派生类具有相同的构造函数.例如:
- public abstract class NamedFoo
- {
- private readonly string name;
- public string Name { get { return name; } }
- protected NamedFoo(string name)
- {
- this.name = name;
- }
- }
- public class DerivedFooWithConstantName
- {
- public DerivedFooWithConstantName() : base("constant name")
- {
- }
- }
在这种情况下,派生类构造函数是“删除”参数(通过提供一个常量值作为抽象类构造函数的参数),但在其他情况下,它可以“添加”所需的参数或混合.