Как отключить конструктор без параметров в С#

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

class CBase : CAbstract
{
}

Для класса CBase он должен быть инициализирован путем предоставления параметра, поэтому как отключить конструктор без параметров для класса CBase?

Ответ 1

Если вы определяете параметризованный конструктор в CBase, конструктор по умолчанию отсутствует. Вам не нужно ничего особенного делать.

Если вы намерены для всех производных классов CAbstract реализовать параметризованный конструктор, это не то, что вы можете (чисто) выполнить. Полученные типы имеют свободу предоставлять свои собственные члены, включая перегрузки конструктора.

Единственное, что от них требуется, это то, что если CAbstract предоставляет только параметризованный конструктор, конструкторы производных типов должны ссылаться на него напрямую.

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

Ответ 2

Чтобы отключить конструктор по умолчанию, вам необходимо предоставить конструктор, отличный от стандартного.

Код, который вы вставили, не подлежит компиляции. Чтобы сделать его компилируемым, вы можете сделать что-то вроде этого:

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

Ответ 3

Пожалуйста, поправьте меня, если я ошибаюсь, но я думаю, что я достиг этой цели с помощью этого кода:

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

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