我知道抽象类中的构造函数应该在 C# 中受到保护。
但是一些抽象类不需要非无参构造函数。例如:
public abstract MyAbstractClass {
public abstract Method1();
public abstract Method2();
// non-parameterless constructors are not needed
}
我的问题是,在上面的类中,是否需要提供一个空的受保护构造函数来覆盖默认的隐式构造函数?那是:
public abstract MyAbstractClass {
protected MyAbstractClass() { }
public abstract Method1();
public abstract Method2();
}
如果我不提供这个空的受保护构造函数,就会有一个隐式默认构造函数,它是公共的(对吗?)。这打破了“抽象类中的构造函数不应该是公共的”的规则。
但是当我查看 ASP.NET MVC 框架的源代码时,我发现它们没有为抽象类提供空的受保护构造函数。所以,也许设计规则应该是:
如果在抽象类中定义构造函数,它们不应该是公共的。
如果您不需要抽象类中的非无参数构造函数,请不要定义它们。
有什么想法吗?