如何在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) { } }