Запретить использование конструктора по умолчанию

Есть ли способ предотвратить использование конструктора по умолчанию?

Все, что я могу придумать, это исключение, но мне бы хотелось что-то, что вызывает ошибку времени компиляции.

Ответ 1

  • Если все в классе статично, подумайте о том, чтобы сделать его статическим классом. Таким образом, вы не получите конструктора вообще.
  • Если вам нужен конструктор без параметров, но вы не хотите, чтобы он был общедоступным, объявите его явно и сделайте его закрытым (или внутренним и т.д.).
  • Если вы не хотите конструктор без параметров, но хотите конструкторы с параметрами, просто объявите их - конструктор по умолчанию не будет создан для вас

Я думаю, что он должен охватывать все базы...

Ответ 2

Сделать его закрытым.

Итак,

class SomeClass
{
    private SomeClass()
    {
    }

    public SomeClass(int SomeParam)
    {
    }
}

Ответ 3

Вы можете просто сделать это частным:

private MyClass()
{
}

Альтернативно (если вы еще не знаете), если вы просто объявляете конструктор с параметрами, по умолчанию он не добавляется компилятором, например.

private MyClass(string myParameter)
{
    //Can't call new MyClass() anymore
}

Ответ 4

Одна вещь, чтобы упомянуть, что другие нет. Конструктор по умолчанию должен все еще иметь возможность устанавливать биты реализации по умолчанию, чтобы избежать повторного использования. Это не проблема, если она является частной, так как вы все равно можете привязать к частному конструктору. Вы просто делаете его недоступным для внешних источников.

private MyClass()
{
}

public MyClass(string something) : this()
{
}

Это решает проблему. Однако обратите внимание, что защищенный может быть предпочтительной реализацией, если класс не запечатан.

Ответ 5

Помимо других ответов, вы можете прочитать следующий текст, для получения дополнительной информации о шаблоне Singleton и некоторых примерах. Шаблон Singleton полагается на частный конструктор.

http://www.yoda.arachsys.com/csharp/singleton.html