Ви повинні пам’ятати, що якщо ви не надасте перевантажений конструктор, компілятор створить для вас конструктор за замовчуванням. Це означає, що якщо у вас просто є
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()
{
}
public Foo(int x, int y)
: this()
{
}
public Foo(int x, int y, int z)
: this()
{
}
}