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 = "+1-999-123-45-67";
friend.Email = "ivan@example.com";

Console.WriteLine($"Имя: {friend.Name}, Телефон: {friend.Phone}, Email: {friend.Email}");

Что здесь происходит:

  1. Создаём объект с помощью new Contact().
  2. Присваиваем значения его полям.
  3. Выводим данные на экран.

Пример 2:

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

Contact boss = new Contact();
boss.Name = "Анастасия Сергеевна";
boss.Phone = "+1-888-765-43-21";
boss.Email = "nastya@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 = "+7-911-111-22-33";

contacts[1] = new Contact();
contacts[1].Name = "Мария";
contacts[1].Phone = "+7-915-123-45-67";

contacts[2] = new Contact();
contacts[2].Name = "Петр";
contacts[2].Phone = "+7-921-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(). Это сработает, если не пытаться использовать результат сразу — но компилятор начнёт ругаться, если вы попытаетесь подставить "метод" туда, где ожидается значение. Всегда проверяйте: метод должен вызываться с круглыми скобками, даже если он не принимает параметров.

2
Задача
C# SELF, 16 уровень, 2 лекция
Недоступна
Простой класс с использованием оператора new
Простой класс с использованием оператора new
2
Задача
C# SELF, 16 уровень, 2 лекция
Недоступна
Создание массива объектов
Создание массива объектов
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ