abstract class CAbstract
{
private string mParam1;
public CAbstract(string param1)
{
mParam1 = param1;
}
}
class CBase : CAbstract
{
}
对于类CBase,它应该通过提供参数进行初始化,那么如何禁用CBase类的无参数构造函数?如何在C#中禁用无参数构造函数
abstract class CAbstract
{
private string mParam1;
public CAbstract(string param1)
{
mParam1 = param1;
}
}
class CBase : CAbstract
{
}
对于类CBase,它应该通过提供参数进行初始化,那么如何禁用CBase类的无参数构造函数?如何在C#中禁用无参数构造函数
如果您在CBase
定义参数的构造函数,有是没有默认构造函数。你不需要做任何特别的事情。
如果你的意图是所有的派生类CAbstract
实现一个参数化的构造函数,这是不是你可以(干净地)完成的。派生类型可以自由提供自己的成员,包括构造函数重载。
唯一他们的要求是,如果CAbstract
只公开一个参数的构造函数,派生类的构造函数必须直接调用它。
class CDerived : CAbstract
{
public CDerived() : base("some default argument") { }
public CDerived(string arg) : base(arg) { }
}
+ 1用于约束派生类的额外位。这就是为什么编写好的OOP库很困难。 – user7116 2011-06-08 01:56:45
OP指出不需要缺省构造函数。为什么你在你的代码中显示默认的构造函数? – 2011-06-08 03:26:03
@Alex,这个问题是不明确的,至少对我来说,因此我的第二和第三段以及附带的代码片段。我不能完全说出他想要什么,但是我的感觉*是他想要的是语言不提供的东西。 – 2011-06-08 03:32:26
要禁用默认构造函数,您需要提供非默认构造函数。
您粘贴的代码不可编译。为了让编译,你可以做这样的事情:
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)
{
}
}
这不会阻止儿童提供无参数构造函数,它只会强制孩子显式调用基本参数化构造函数。 – 2011-11-15 03:04:03
的[防止默认构造函数的用法]可能重复(http://stackoverflow.com/questions/2875581/prevent-usage-default-constructor) – 2013-03-19 23:46:59
@Sven也许这个类在某些处理语言处理的应用程序中代表字母“C”:D – AaronLS 2013-10-11 01:33:38