1

我知道抽象类中的构造函数应该在 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 框架的源代码时,我发现它们没有为抽象类提供空的受保护构造函数。所以,也许设计规则应该是:

如果在抽象类中定义构造函数,它们不应该是公共的。

如果您不需要抽象类中的非无参数构造函数,请不要定义它们。

有什么想法吗?

4

1 回答 1

6

不,您不需要声明受保护的默认构造函数。如果您在抽象类的构造函数中没有任何事情要做,请不要声明一个。如果您确实有事要做,将其标记为受保护将与将其标记为公共相同,因为基本构造函数只能由子级调用,并且子级无论如何都具有受保护的访问权限。

于 2012-08-07T03:05:59.670 回答