如何在C#中禁用无参数构造函数

Car*_*Liu 17 .net c# inheritance constructor abstract-class

abstract class CAbstract
{
   private string mParam1;
   public CAbstract(string param1)
   {
      mParam1 = param1;
   }
}

class CBase : CAbstract
{
}
Run Code Online (Sandbox Code Playgroud)

对于类CBase,应该通过提供参数来初始化它,那么如何禁用CBase类的无参数构造函数?

Ant*_*ram 24

如果在中定义参数化构造函数CBase,则没有默认构造函数.你不需要做任何特别的事情.

如果您的目的是为了CAbstract实现参数化构造函数的所有派生类,那么您可以(干净地)完成这项任务.派生类型可以自由地提供自己的成员,包括构造函数重载.

它们唯一需要的是,如果CAbstract只公开参数化构造函数,派生类型的构造函数必须直接调用它.

class CDerived : CAbstract
{
     public CDerived() : base("some default argument") { }
     public CDerived(string arg) : base(arg) { }
}
Run Code Online (Sandbox Code Playgroud)

  • +1约束派生类上的额外位。这就是为什么很难编写好的OOP库的原因。 (3认同)

Ale*_*Aza 13

要禁用默认构造函数,您需要提供非默认构造函数.

您粘贴的代码不可编译.为了使其可编辑,您可以执行以下操作:

class CBase : CAbstract
{
    public CBase(string param1)
        : base(param1)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)