JavaRush /Курси /C# SELF /Створення об’єктів за допомогою оператора new

Створення об’єктів за допомогою оператора new

C# SELF
Рівень 16 , Лекція 2
Відкрита

1. Як правильно створити об’єкт

Оператор new у C# — це «магічна кнопка», що перетворює схематичне «креслення» (наш клас) на справжній екземпляр (об’єкт), з яким можна працювати. Простіше кажучи: клас визначає що об’єкт уміє та які має властивості, а new створює цей об’єкт у пам’яті комп’ютера.

Без оператора new наші класи були б чимось на кшталт креслень без будівель: можна милуватися, обговорювати, але ні пострибати, ні розлити чай на крісло з алькантари не вийде.

Якщо клас — це рецепт піци, то оператор new — кухар, який за цим рецептом створює справжню смачну піцу. Об’єкт же — результат його роботи: піца в коробці, яку вже можна з’їсти.

Синтаксис

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

Contact cont = new Contact();
Створення об’єкта за допомогою new
  • Contact ліворуч — це тип змінної, яку ми створюємо.
  • cont — імʼя змінної (обирайте змістовні, щоб не страждати під час зневадження згодом).
  • new Contact() — виклик оператора new, який створює об’єкт типу Contact.

У пам’яті

Коли виконується цей код, операційна система резервує частину пам’яті для нового об’єкта і повертає посилання (адресу), за якою цей об’єкт «живе». Це посилання зберігається у змінній cont.

Схема

+------------------+             +--------------------+
|  змінна cont     | --------->  |   Об'єкт Contact   |
+------------------+             +--------------------+
          |
          |       (містить ім'я, телефон, email, ...)
          |
         адреса

2. Створюємо об’єкти контактів

У попередніх прикладах ми оголосили такий клас:

public class Contact
{
    public string Name;
    public string Phone;
    public string Email;
}

Тепер створимо новий об’єкт типу Contact:


Contact friend = new Contact();
friend.Name = "Іван Петренко";
friend.Phone = "+380-99-123-45-67";
friend.Email = "ivan.petrenko@example.com";

Console.WriteLine($"Імʼя: {friend.Name}, Телефон: {friend.Phone}, Електронна пошта: {friend.Email}");

Що тут відбувається:

  1. Створюємо об’єкт за допомогою new Contact().
  2. Присвоюємо значення його полям.
  3. Виводимо дані на екран.

Приклад 2:

Додаймо роботу з кількома контактами — створимо ще один об’єкт:

Contact boss = new Contact();
boss.Name = "Анастасія Коваль";
boss.Phone = "+380-68-765-43-21";
boss.Email = "anastasia.koval@company.com";

Console.WriteLine($"Керівник: {boss.Name}, Телефон: {boss.Phone}");

Чи не нагадує це заповнення анкети для кожного знайомого? Саме так об’єкти і працюють: кожен створений екземпляр отримує свої унікальні значення й зберігає їх окремо від інших!

3. Використання масиву об’єктів

Якщо нам потрібно зберігати не один і не два, а, скажімо, десять контактів, логічно тримати їх у масиві:


Contact[] contacts = new Contact[3];           // масив для 3 об'єктів

contacts[0] = new Contact();
contacts[0].Name = "Денис";
contacts[0].Phone = "+380-91-111-22-33";

contacts[1] = new Contact();
contacts[1].Name = "Марія";
contacts[1].Phone = "+380-95-123-45-67";

contacts[2] = new Contact();
contacts[2].Name = "Петро";
contacts[2].Phone = "+380-92-543-21-00";

// Виведемо всіх на екран
for (int i = 0; i < contacts.Length; i++)
{
    Console.WriteLine($"Контакт {i+1}: {contacts[i].Name}, {contacts[i].Phone}");
}

Важливо: ми використовуємо new для кожного елемента масиву! Просто створення масиву не створює самі об’єкти, а лише готує місце під посилання на них.

4. Оператор new і значення за замовчуванням

Іноді виникає запитання: якщо ви просто оголосите змінну типу Contact, але не присвоїте їй об’єкт за допомогою new, що станеться?


Contact someContact;
someContact.Name = "Помилка";    // Помилка компіляції!

Якщо ж ви напишете:

Contact someContact = null;

то під час спроби звернутися до someContact.Name ваша програма «впаде» з відомим винятком:

System.NullReferenceException: Посилання на об'єкт не вказує на екземпляр об'єкта.

Щоб цього уникнути, завжди ініціалізуйте об’єкти за допомогою new перед використанням.

5. Виклик конструктора

Коли ви пишете new Contact(), у цей момент викликається спеціальний метод — конструктор. Наразі наш клас явних конструкторів не містить, тому викликається неявний конструктор за замовчуванням, який створює об’єкт, а всі поля заповнює значеннями за замовчуванням (null для посилальних типів і нулем для числових).

У наступній лекції ви дізнаєтеся, як створювати власні конструктори — наприклад, одразу передавати імʼя і телефон. Поки що у нас працює лише конструктор без параметрів.

Приклади з реального життя

Робота з об’єктами через оператор new — це щоденна практика будь-якого C#-розробника. Уявімо, що ви:

  • Створюєте користувача на сайті — у коді з’являється новий об’єкт User.
  • Відкриваєте замовлення в інтернет-магазині — з’являється новий Order.
  • Заносите дані про книгу — новий об’єкт Book.

У будь-якому сучасному застосунку на C# ви побачите тисячі рядків із оператором new.

Пам’ять до створення об’єкта


            Contact firstContact; // Змінна, але ні на що не вказує
+--------------------------+
|   firstContact           |---->  null (нічого!)
+--------------------------+

Після створення об’єкта


Contact firstContact = new Contact();
+--------------------------+                 +----------------------+
|   firstContact           |---------------->|   Об'єкт Contact     |
+--------------------------+                 +----------------------+

6. Практичний приклад

Припустімо, ми хочемо дозволити користувачеві створювати нові контакти через введення з клавіатури:


Console.WriteLine("Введіть імʼя:");
string name = Console.ReadLine();

Console.WriteLine("Введіть телефон:");
string phone = Console.ReadLine();

Contact newContact = new Contact();
newContact.Name = name;
newContact.Phone = phone;

Console.WriteLine($"Збережено контакт: {newContact.Name}, {newContact.Phone}");

Тепер кожне введення користувача створюватиме свій унікальний об’єкт у пам’яті, який можна зберігати, змінювати, виводити — робити з ним усе, що забажаєте!

7. Типові помилки і кумедні граблі

Помилка № 1: забули викликати new перед роботою з об’єктом.
Якщо оголосити змінну, але не ініціалізувати її, ви ризикуєте отримати або помилку компіляції, або NullReferenceException під час виконання. Це класика: оголосили об’єкт — одразу створіть його за допомогою new, якщо він вам реально потрібен.

Помилка № 2: створили масив об’єктів, але не створили самі об’єкти.
Ось поширена пастка: ви створюєте масив типу Contact[], але забуваєте, що всередині нього — просто набір null. Спроба звернутися до contacts[0].Name призведе до збою. Спочатку потрібно ініціалізувати кожен елемент масиву окремо: contacts[i] = new Contact();.

Помилка № 3: переплутали метод із властивістю.
Іноді новачки думають, що метод можна використовувати як поле: пишуть student.GetName замість student.GetName(). Це може не викликати помилки доти, доки ви не спробуєте використати результат; проте компілятор поскаржиться, щойно ви підставите «метод» туди, де очікують значення. Завжди перевіряйте: метод потрібно викликати з круглими дужками, навіть якщо він не приймає параметрів.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ