Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C语言中禁用无参数构造函数#_C#_.net_Inheritance_Constructor_Abstract Class - Fatal编程技术网

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

C# 如何在C语言中禁用无参数构造函数#,c#,.net,inheritance,constructor,abstract-class,C#,.net,Inheritance,Constructor,Abstract Class,对于CBase类,应该通过提供参数来初始化它,因此如何禁用CBase类的无参数构造函数?要禁用默认构造函数,需要提供非默认构造函数 粘贴的代码不可编译。要使其可编译,可以执行以下操作: abstract class CAbstract { private string mParam1; public CAbstract(string param1) { mParam1 = param1; } } class CBase : CAbstract { } 如果

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

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

粘贴的代码不可编译。要使其可编译,可以执行以下操作:

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

class CBase : CAbstract
{
}

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

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

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

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

如果我错了,请纠正我,但我认为我通过以下代码实现了这一目标:

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

+1用于约束派生类的额外位。这就是为什么很难编写好的OOP库。OP声明不需要默认构造函数。为什么要在代码中显示默认构造函数?@Alex,这个问题是不明确的,至少对我来说是这样,因此我的第二段和第三段以及附带的代码段。我不能完全说出他想要什么,但我的感觉是他想要的是语言没有提供的东西。这并不阻止孩子们提供无参数构造函数,它只强制孩子们显式调用基本参数化构造函数。还有
params object[]列表
可以为空可能是@Sven的副本可能这个类在某些处理语言处理的应用程序中代表字母“C”:D
//only for forbiding the calls of constructors without parameters on derived classes
public class UnconstructableWithoutArguments
{
    private UnconstructableWithoutArguments()
    {
    }

    public UnconstructableWithoutArguments(params object[] list)
    {
    }
}