Вы должны иметь в виду, что если вы не предоставите перегруженный конструктор, компилятор сгенерирует конструктор по умолчанию для вас.Это означает, что если у вас просто есть
public class Foo
{
}
Компилятор сгенерирует это как:
public class Foo
{
public Foo() { }
}
Однако, как только вы добавите другой конструктор
public class Foo
{
public Foo(int x, int y)
{
// ...
}
}
Компилятор больше не будет автоматически генерировать конструктор по умолчанию для вас.Если класс уже использовался в другом коде, который полагался на наличие конструктора по умолчанию, Foo f = new Foo();
, этот код теперь сломался бы.
Если вы не хотите, чтобы кто-то мог инициализировать классбез предоставления данных вы должны создать конструктор по умолчанию, который является private
, чтобы явно указывать на то, что вы препятствуете созданию экземпляров без входных данных.
Однако бывают случаи, когда необходимопредоставить конструктор по умолчанию (открытый или закрытый).Как упоминалось ранее, для некоторых типов сериализации требуется конструктор по умолчанию.Бывают также случаи, когда класс имеет несколько параметризованных конструкторов, но также требует инициализации «более низкого уровня», и в этом случае может использоваться частный конструктор по умолчанию, который связан с параметризованными конструкторами.
public class Foo
{
private Foo()
{
// do some low level initialization here
}
public Foo(int x, int y)
: this()
{
// ...
}
public Foo(int x, int y, int z)
: this()
{
// ...
}
}