Инициализаторы объектов
Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 8 из 70.
Инициализаторы объектов предоставляют удобный способ установки значений свойств при создании объекта без вызова конструктора с множеством параметров.
Традиционный способ с использованием конструктора
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
Person person = new Person();
person.Name = "Alice";
person.Age = 25;
person.City = "New York";Использование синтаксиса инициализатора объектов
Person person = new Person
{
Name = "Alice",
Age = 25,
City = "New York"
};Инициализаторы объектов с конструкторами
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
public Person(string name)
{
Name = name;
}
}
// Конструктор устанавливает Name, инициализатор устанавливает остальные свойства
Person person = new Person("Bob")
{
Age = 30,
City = "London"
};Вложенные инициализаторы объектов
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
public class Person
{
public string Name { get; set; }
public Address Address { get; set; }
}
Person person = new Person
{
Name = "Charlie",
Address = new Address
{
Street = "123 Main St",
City = "Boston"
}
};Создание нескольких объектов с помощью инициализаторов
Person person1 = new Person { Name = "Alice", Age = 25 };
Person person2 = new Person { Name = "Bob", Age = 30 };
Person person3 = new Person { Name = "Charlie", Age = 35 };Инициализаторы объектов делают код чище и читабельнее. Свойства устанавливаются после выполнения конструктора. Вы можете использовать инициализаторы с параметрами конструктора или без них, что делает создание объектов гибким и лаконичным.
Задание
СреднеСоздайте три объекта Student, используя различные подходы инициализации объектов:
- student1: Используйте конструктор по умолчанию с инициализатором объекта, чтобы установить все свойства (Name, StudentId, Major, GPA) из входных данных
- student2: Используйте инициализатор объекта, чтобы установить только Name = "Bob" и Major = "Engineering"
- student3: Используйте конструктор с "Charlie" в качестве параметра, затем используйте инициализатор объекта, чтобы установить StudentId = 54321, Major = "Mathematics", GPA = 3.5
Шпаргалка
Инициализаторы объектов предоставляют удобный способ установки значений свойств при создании объекта:
Person person = new Person
{
Name = "Alice",
Age = 25,
City = "New York"
};Инициализаторы объектов можно комбинировать с конструкторами:
Person person = new Person("Bob")
{
Age = 30,
City = "London"
};Вложенные инициализаторы объектов позволяют устанавливать свойства вложенных объектов:
Person person = new Person
{
Name = "Charlie",
Address = new Address
{
Street = "123 Main St",
City = "Boston"
}
};Можно лаконично создавать несколько объектов:
Person person1 = new Person { Name = "Alice", Age = 25 };
Person person2 = new Person { Name = "Bob", Age = 30 };Попробуйте сами
using System;
class Program
{
static void Main()
{
string name = Console.ReadLine();
int studentId = int.Parse(Console.ReadLine());
string major = Console.ReadLine();
double gpa = double.Parse(Console.ReadLine());
// TODO: Создайте student1, используя инициализатор объектов со всеми свойствами
// Используйте конструктор по умолчанию и установите Name, StudentId, Major и GPA
// TODO: Создайте student2, используя инициализатор объектов только с Name и Major
// Name должно быть "Bob", Major должно быть "Engineering"
// TODO: Создайте student3, используя конструктор с параметром имени "Charlie"
// Затем используйте инициализатор объектов, чтобы установить StudentId = 54321, Major = "Mathematics", GPA = 3.5
Console.WriteLine($"Student 1: {student1.Name} (ID: {student1.StudentId}) - {student1.Major}, GPA: {student1.GPA}");
Console.WriteLine($"Student 2: {student2.Name} (ID: {student2.StudentId}) - {student2.Major}, GPA: {student2.GPA}");
Console.WriteLine($"Student 3: {student3.Name} (ID: {student3.StudentId}) - {student3.Major}, GPA: {student3.GPA}");
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыПространства имен и директивыВведение в классы и объектыКлючевое слово 'this'Методы и параметрыПоля и свойстваКонструкторыИнициализаторы объектовИтоги — Простой калькулятор4Наследование
Основы синтаксиса наследования (:)Ключевое слово 'base'Ключевые слова Virtual и OverrideЗапечатанные классыБазовый класс 'object'Итоги — Иерархия сотрудников7Продвинутые возможности
Перегрузка операторовИндексаторы (this[])Переопределение ToString()Методы расширенияПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПотокобезопасный SingletonПаттерн FactoryПаттерн Observer (События)Паттерн Strategy13Финальные испытания
Платформа для онлайн-обученияКомпонент игрового персонажаСервис аренды транспорта2Свойства и статические члены
Автоматически реализуемые свойстваСвойства только для чтения и записиСтатические поля и методыСтатические классыЧлены в виде выражений5Полиморфизм и интерфейсы
Полиморфизм: компиляция vs выполнениеИнтерфейс vs абстрактный классМножественные интерфейсыЯвные интерфейсыUpcasting и DowncastingИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция вместо наследованияGenerics (классы и методы)Делегаты и событияАтрибуты и рефлексияIDisposable и оператор usingОсновы Dependency Injection11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Архитектура классов
Экземплярные и статические данныеКлючевые слова 'readonly' и 'const'Опорные поляПовторение — Менеджер банковских счетов6Инкапсуляция
Модификаторы доступаСвойства для инкапсуляцииРеализация скрытия данныхПаттерны неизменяемостиИтоги — Записи студентов9Переменное количество аргументов
Ключевое слово 'params'Необязательные параметрыИменованные аргументыПерегрузка методов