Как отключить конструктор без параметров в C # - PullRequest
17 голосов
/ 08 июня 2011
abstract class CAbstract
{
   private string mParam1;
   public CAbstract(string param1)
   {
      mParam1 = param1;
   }
}

class CBase : CAbstract
{
}

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

Ответы [ 3 ]

24 голосов
/ 08 июня 2011

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

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

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

class CDerived : CAbstract
{
     public CDerived() : base("some default argument") { }
     public CDerived(string arg) : base(arg) { }
}
13 голосов
/ 08 июня 2011

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

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

class CBase : CAbstract
{
    public CBase(string param1)
        : base(param1)
    {
    }
}
0 голосов
/ 04 ноября 2011

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

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

    public UnconstructableWithoutArguments(params object[] list)
    {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...