Використання конструкторів (керівництво з програмування на c #), microsoft docs

В цій статті

Кожен раз, коли створюється клас або структура. викликається конструктор. Конструктори мають ім'я, що збігається з ім'ям класу або структури, і зазвичай ініціалізують члени даних нового об'єкта.

У наступному прикладі клас з ім'ям Taxi визначається за допомогою простого конструктора. Потім оператор new створює екземпляр цього класу. Конструктор Taxi викликається оператором new відразу після того, як нового об'єкту буде виділена пам'ять.

Конструктор, який не приймає ніяких параметрів, називається конструктором за замовчуванням. Конструктори за замовчуванням викликаються щоразу, коли створюється екземпляр об'єкта за допомогою оператора new. а аргументи в new не передаються. Додаткові відомості див. У розділі Конструктори примірників.

Якщо клас є статичним. компілятор C # виділяє класам без конструкторів відкритий конструктор за замовчуванням, що дозволяє створювати екземпляри класів. Додаткові відомості див. У розділі Статичні класи і члени статичних класів.

Створення екземплярів класу можна заборонити, зробивши конструктор закритим, в такий спосіб:

Додаткові відомості див. У розділі Закриті конструктори.

Конструктори для типів struct схожі на конструктори класів, проте structs не може містити явний конструктор за замовчуванням, оскільки надається компілятором автоматично. Цей конструктор ініціалізує кожне поле в struct зі значенням за замовчуванням. Додаткові відомості див. У розділі Таблиця значень за замовчуванням. При цьому конструктор за замовчуванням викликається тільки в тому випадку, якщо struct створюється за допомогою змінної new. Наприклад, в цьому коді конструктор за замовчуванням використовується для Int32 - це забезпечує ініціалізацію цілого числа:

У той же час такий код викликає помилку компілятора, оскільки не використовує new. і тому, що використовує не ініціалізований об'єкт:

Крім того, об'єкти на основі structs (включаючи всі вбудовані числові типи) можна форматувати або призначити, а потім використовувати, як в наступному прикладі:

У зв'язку з цим викликати конструктор за замовчуванням для типу значення необов'язково.

Обидва класи і structs можуть визначати конструктори, які беруть параметри. Конструктори, які беруть параметри, необхідно викликати за допомогою оператора new або base. Класи і structs можуть визначати також кілька конструкторів; для визначення конструктора за замовчуванням жоден з них не потрібно. приклад:

Цей клас можна створити, скориставшись одним з наступних операторів:

Конструктор може використовувати ключове слово base для виклику конструктора базового класу. наприклад:

У цьому прикладі конструктор базового класу викликається перед виконанням відповідного йому блоку. Ключове слово base можна використовувати як з параметрами, так і без них. Будь-які параметри для конструктора можна використовувати як параметри для base або як частина виразу. Додаткові відомості див. У розділі base.

Якщо базовий клас не пропонує конструктор за замовчуванням, похідний клас повинен явно викликати конструктор базового класу за допомогою base.

Конструктор може викликати інший конструктор в тому ж об'єкті за допомогою цього ключового слова. Як і base. this можна використовувати з параметрами або без, а всі параметри в конструкторі доступні як параметри this або як частина виразу. Наприклад, другий конструктор в попередньому прикладі можна переписати, використовуючи this.

Застосування ключового слова this в наведеному вище прикладі призвело до виклику конструктора:

Конструктори можуть мати позначку public. private. protected. internal або protected internal. Ці модифікатори доступу визначають, яким чином користувачі класу зможуть створювати клас. Додаткові відомості див. У розділі Модифікатори доступу.

Конструктор можна оголосити статичним, використовуючи ключове слово static. Статичні конструктори викликаються автоматично безпосередньо перед доступом до статичних полях і зазвичай використовуються для ініціалізації членів статичного класу. Додаткові відомості див. У розділі Статичні конструктори.

Специфікація мови C #

Додаткові відомості див. У специфікації мови C #. Специфікація мови є розпорядчим джерелом інформації про синтаксис і використанні мови C #.