我知道抽象类中的构造函数在 C# 中应该受到保护。
但是有些抽象类不需要非无参构造函数。例如:
public abstract MyAbstractClass {
public abstract Method1();
public abstract Method2();
// non-parameterless constructors are not needed
}
我的问题是,在上面的类中,我是否需要提供一个空的 protected 构造函数来覆盖默认的隐式构造函数?即:
public abstract MyAbstractClass {
protected MyAbstractClass() { }
public abstract Method1();
public abstract Method2();
}
如果我不提供这个空的 protected 构造函数,将会有一个隐式默认构造函数,它是公共(public)的(正确吗?)。这打破了“抽象类中的构造函数不应该公开”。
但是当我查看 ASP.NET MVC 框架的源代码时,我发现它们没有为抽象类提供空的 protected 构造函数。所以,也许设计规则应该是:
如果您在抽象类中定义构造函数,它们不应该是公共(public)的。
如果您不需要在抽象类中使用非无参数构造函数,那么就不要定义它们。
有什么想法吗?
最佳答案
不,您不需要声明 protected 默认构造函数。如果您在抽象类的构造函数中无事可做,请不要声明一个。如果您确实有事要做,将其标记为 protected 将与将其标记为公开相同,因为基类构造函数只能由子对象调用,而子对象无论如何都具有 protected 访问权限。
关于c# - 我是否需要为抽象类提供一个空的 protected 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11838679/