C# 我是否需要为抽象类提供一个空的受保护构造函数?

C# 我是否需要为抽象类提供一个空的受保护构造函数?,c#,.net,abstract-class,design-guidelines,C#,.net,Abstract Class,Design Guidelines,我知道抽象类中的构造函数应该在C中得到保护 但是一些抽象类不需要无参数构造函数。例如: public abstract MyAbstractClass { public abstract Method1(); public abstract Method2(); // non-parameterless constructors are not needed } 我的问题是,在上面的类中,我是否需要提供一个空的受保护构造函数来覆盖默认的隐式构造函数?即: public

我知道抽象类中的构造函数应该在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();
}
如果我不提供这个空的受保护构造函数,就会有一个隐式的默认构造函数,它是public correct?。这打破了抽象类中的构造函数不应该是公共的规则

但是当我检查ASP.NET MVC framework的源代码时,我发现它们没有为抽象类提供空的受保护构造函数。因此,也许设计规则应该是:

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

如果抽象类中不需要无参数构造函数,就不要定义它们


有什么想法吗?

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

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

我认为这并不能回答问题。如果公共构造函数是在抽象类中定义的,那么它们也只能由子类调用。如果我在抽象类中定义公共构造函数,则不会出现编译器错误。我认为这并不能回答这个问题。如果公共构造函数是在抽象类中定义的,那么它们也只能由子类调用。如果在抽象类中定义公共构造函数,则不会出现编译器错误。在C语言中没有隐式构造函数。所有引用变量都初始化为null unline C++如果您没有定义任何构造函数,那么将有一个默认构造函数。在C I beleive中没有隐式构造函数。所有引用变量都初始化为null unline C++如果您没有定义任何构造函数,那么将有一个默认构造函数。