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

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

class CBase : CAbstract
{
}

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


如果你在CBase定义了一个参数化的构造函数,那么没有默认的构造函数。 你不需要做任何特别的事情。

如果你的意图是所有CAbstract派生类实现一个参数化的构造函数,那是你不能(干净地)完成的。 派生类型可以自由提供自己的成员,包括构造函数重载。

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

class CDerived : CAbstract
{
     public CDerived() : base("some default argument") { }
     public CDerived(string arg) : base(arg) { }
}

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

您粘贴的代码不可编译。 为了使它可以编译,你可以做这样的事情:

class CBase : CAbstract
{
    public CBase(string param1)
        : base(param1)
    {
    }
}

如果我错了,请纠正我,但我认为我通过此代码实现了该目标:

//only for forbiding the calls of constructors without parameters on derived classes
public class UnconstructableWithoutArguments
{
    private UnconstructableWithoutArguments()
    {
    }

    public UnconstructableWithoutArguments(params object[] list)
    {
    }
}
链接地址: http://www.djcxy.com/p/52839.html

上一篇: How to disable parameterless constructor in C#

下一篇: In C#, should I use string.Empty or String.Empty or "" to intitialize a string?