Пользовательские типы
Помимо 16 встроенных предопределённых типов языка C#, разработчики могут создавать собственные пользовательские типы, разделяющиеся на шесть групп:
- Типы классов (class)
- Типы структур (struct)
- Типы массивов (array)
- Типы перечислений (enum)
- Типы делегатов (delegate)
- Типы интерфейсов (interface)
Создание пользовательского типа выполняется через объявление типа
- Вид создаваемого типа
- Имя нового пользовательского типа
- Объявление всех членов данного типа (их имена и определения). Исключение составляют массивы и делегаты — у них нет именованных членов
После завершения объявления можно создавать и использовать объекты этого типа точно так же, как стандартные предопределённые типы.
Предопределённые (встроенные) типы готовы к работе сразу, объекты из них создаются без предварительных настроек. Пользовательские типы, как видно из названия, требуют сначала описать сам шаблон типа, а уже потом создавать экземпляры объектов.
Пример: базовые встроенные типы int и float работают из коробки, достаточно написать int age; float price;.
Для ранее упомянутого пользовательского типа Person нужно выполнить два шага:
Шаг первый: Объявление (определяем шаблон типа через class Person {})
Шаг второй: Инстанцирование (создаём объект командой Person lucas = new Person();)
// Класс автомобиля
public class Car
{
// 1. Приватные поля (низкоуровневое хранение данных)
private string _brand; // Марка машины
private string _color; // Цвет кузова
// 2. Публичные свойства (внешний доступ с поддержкой проверки значений)
public string Brand
{
get { return _brand; }
set
{
// Простая проверка: марка не может быть пустой строкой
if (!string.IsNullOrEmpty(value))
_brand = value;
else
Console.WriteLine("Название марки не может быть пустым!");
}
}
public string Color
{
get { return _color; }
set { _color = value; }
}
// 3. Метод поведения: движение
public void Drive()
{
Console.WriteLine($"Автомобиль марки【{Brand}】цвета【{Color}】движется по дороге!");
}
}Code language: JavaScript (javascript)
Пример выше реализует класс автомобиля с двумя полями. Поля — это переменные на основе встроенных типов для хранения реальных данных. Также здесь присутствуют два публичных свойства Brand и Color, по сути являющиеся функциями, мы разберем их позже. Также есть функциональный член public void Drive(){}.
Все разновидности пользовательских типов мы подробно разберем в следующих разделах.

Пользовательские типы