0Pricing
C# Academy · Урок

Инициализаторы объектов и коллекций

Кратко задавайте свойства при создании объекта.

«Инициализаторы объектов и коллекций» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Что такое инициализатор объекта

Инициализатор объекта задаёт открытые свойства или поля сразу после new, внутри { }, без необходимости создавать отдельный конструктор для каждой комбинации.

using System;

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        var p = new Person { Name = "Ada", Age = 36 };
        Console.WriteLine(p.Name + ", " + p.Age);
    }
}

Синтаксис инициализатора

Перечислите присваивания свойствам через запятую внутри фигурных скобок. Они выполняются после завершения конструктора.

using System;

class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
}

class Program
{
    static void Main()
    {
        var car = new Car
        {
            Make = "Toyota",
            Model = "Corolla",
            Year = 2022
        };
        Console.WriteLine(car.Year + " " + car.Make + " " + car.Model);
    }
}

Сочетание конструктора и инициализатора

Можно вызвать конструктор AND использовать инициализатор. Сначала выполняется конструктор, затем инициализатор присваивает перечисленным свойствам значения.

using System;

class Widget
{
    public string Id { get; }
    public string Label { get; set; }

    public Widget(string id) { Id = id; }
}

class Program
{
    static void Main()
    {
        var w = new Widget("w1") { Label = "Submit" };
        Console.WriteLine(w.Id + ": " + w.Label);
    }
}

Инициализация только некоторых свойств

Перечисляйте только нужные Вам свойства; остальные сохраняют значения по умолчанию. Благодаря этому инициализаторы остаются гибкими.

using System;

class Settings
{
    public bool DarkMode { get; set; } = false;
    public int Volume { get; set; } = 50;
    public string Lang { get; set; } = "en";
}

class Program
{
    static void Main()
    {
        var s = new Settings { DarkMode = true };
        Console.WriteLine(s.DarkMode + ", " + s.Volume + ", " + s.Lang);
    }
}

Инициализаторы коллекций

Инициализатор коллекции заполняет список, множество или массив во время создания с помощью { } и элементов, разделённых запятыми.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var nums = new List<int> { 1, 2, 3, 4, 5 };
        Console.WriteLine("Count: " + nums.Count);
        Console.WriteLine("Sum: " + Sum(nums));
    }

    static int Sum(List<int> list)
    {
        int t = 0;
        foreach (var n in list) t += n;
        return t;
    }
}

Как работают инициализаторы коллекций

Компилятор превращает каждый элемент в вызов Add(...). Этот синтаксис поддерживает любой тип с методом Add и IEnumerable.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var names = new List<string> { "Ann", "Bob", "Cara" };
        foreach (var n in names)
            Console.WriteLine(n);
    }
}

Инициализаторы словарей

Словари можно инициализировать парами ключ/значение в фигурных скобках; это особенно удобно для таблиц поиска.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var ages = new Dictionary<string, int>
        {
            ["Ann"] = 30,
            ["Bob"] = 25
        };
        Console.WriteLine("Ann is " + ages["Ann"]);
    }
}

Вложенные инициализаторы объектов

Инициализатор объекта может инициализировать вложенные объекты, создавая небольшой граф объектов в одном выражении.

using System;

class Address
{
    public string City { get; set; }
}

class Customer
{
    public string Name { get; set; }
    public Address Home { get; set; } = new Address();
}

class Program
{
    static void Main()
    {
        var c = new Customer
        {
            Name = "Lin",
            Home = new Address { City = "Tokyo" }
        };
        Console.WriteLine(c.Name + " in " + c.Home.City);
    }
}

Коллекции объектов

Сочетайте обе возможности: инициализируйте список, элементы которого сами создаются с помощью инициализаторов объектов.

using System;
using System.Collections.Generic;

class Item
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

class Program
{
    static void Main()
    {
        var cart = new List<Item>
        {
            new Item { Name = "Pen", Price = 1.5m },
            new Item { Name = "Book", Price = 9.0m }
        };
        decimal total = 0;
        foreach (var i in cart) total += i.Price;
        Console.WriteLine("Total: " + total);
    }
}

Инициализаторы и init-свойства

Инициализаторы объектов позволяют задавать свойства только для init, поскольку такие свойства можно присваивать лишь во время инициализации.

using System;

class Config
{
    public string Env { get; init; }
    public int Retries { get; init; }
}

class Program
{
    static void Main()
    {
        var c = new Config { Env = "prod", Retries = 3 };
        Console.WriteLine(c.Env + " / " + c.Retries);
    }
}

Объединение всего вместе

Инициализаторы делают создание объектов декларативным и понятным, особенно для объектов конфигурации и данных для проверки.

using System;
using System.Collections.Generic;

class Team
{
    public string Name { get; set; }
    public List<string> Members { get; set; } = new List<string>();
}

class Program
{
    static void Main()
    {
        var t = new Team
        {
            Name = "Alpha",
            Members = { "Ann", "Bob", "Cara" }
        };
        Console.WriteLine(t.Name + " has " + t.Members.Count + " members");
    }
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли инициализаторы.

Итоги

Инициализаторы объектов задают открытые члены внутри { } после new и выполняются после конструктора. Инициализаторы коллекций добавляют элементы с помощью неявных вызовов Add, а словари поддерживают пары ключ/значение. Оба вида можно вкладывать друг в друга, использовать со свойствами init, а также применять для краткого и декларативного создания объектов.

using System;
using System.Collections.Generic;

class Demo
{
    public string Name { get; set; }
    public List<int> Nums { get; set; } = new List<int>();
}

class Program
{
    static void Main()
    {
        var d = new Demo { Name = "x", Nums = { 1, 2, 3 } };
        Console.WriteLine(d.Name + " " + d.Nums.Count);
    }
}

Часто задаваемые вопросы

Урок «Инициализаторы объектов и коллекций» бесплатный?

Да — полный текст урока «Инициализаторы объектов и коллекций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Инициализаторы объектов и коллекций»?

Кратко задавайте свойства при создании объекта. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Инициализаторы объектов и коллекций»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Определение конструкторов
  2. Цепочка конструкторов с this
  3. Инициализаторы объектов и коллекций
  4. Статические конструкторы
← Назад к C# Academy