C# 抽象类构造函数

C# 抽象类构造函数,c#,constructor,abstract-class,C#,Constructor,Abstract Class,在我所看到的每一个地方,都有博客、内容和注释说抽象类无法实例化 现在在c#中,我创建了一个示例代码,如下所示: public abstract class Fundamental { public Fundamental() { Console.WriteLine("This is an abstract constructor"); } } 现在,为什么comipler建议必须保护构造函数呢。为什么它甚至允许构造函数 我知道我们可以做什么像这样的类实例

在我所看到的每一个地方,都有博客、内容和注释说抽象类无法实例化

现在在c#中,我创建了一个示例代码,如下所示:

public abstract class Fundamental
{
    public Fundamental()
    {
        Console.WriteLine("This is an abstract constructor");
    }
}
现在,为什么comipler建议必须保护构造函数呢。为什么它甚至允许构造函数

我知道我们可以做什么像这样的类实例化

Fundamental instance = new LessFundamental();
其中不太重要的是:

public class LessFundamental : Fundamental { }
但为什么是构造函数呢。我还可以在这个抽象类构造函数上使用内部的、受保护的、公共的。有些地方提到

您仍然可以扩展抽象类并调用抽象类的 派生类中的构造函数

但是什么时候需要呢


它适合哪种设计方案?它不能直接实例化。但它可以从继承自该抽象类的子类中删除。因此,如果它只能从子类实例化,那么构造函数应该受到
保护
而不是
公共

具有公共构造函数的抽象类是完全合法的,但类是抽象的事实意味着只能从其派生类调用构造函数,因此,保护它是安全的。这不是强制性的,但建议这样做,因为抽象类的构造函数得到了有效的保护,即使它们被声明为公共的。@ZoharPeled:问题仍然是,如果你不能从任何地方调用它,为什么它“完全合法”?这是一个我还没有找到好答案的好问题。但这些答案似乎都没有给出编译器允许抽象类上使用公共构造函数的充分理由。我的猜测是,对于编译器团队来说,禁止它从来都不是优先考虑的事情