Разбор домашнего задания: Класс «Студент»
Рассмотрим пример класса Студент с полями name, cse и stepukha, имеющими модификатор доступа private. Значения присваиваются при создании объекта и не изменяются впоследствии. Класс содержит два конструктора: конструктор по умолчанию, устанавливающий значения по умолчанию и выводящий их на экран, и конструктор, принимающий три параметра и устанавливающий значения полей, также выводящий их на экран. Далее создаются три объекта класса Студент.
Свойства и аксессоры Get и Set
Свойство — механизм для чтения или записи значения поля (внутренней переменной класса). Все поля в нашем примере имеют модификатор доступа private, ограничивающий внешний доступ. Свойства с аксессорами get и set обеспечивают контролируемый доступ: get для чтения, set для записи.
Создание свойства с аксессором get
Пример свойства Kurs (тип int) для чтения значения поля kurs:
public int Kurs { get { return kurs; } }
Здесь:
- public — модификатор доступа.
- int — тип поля.
- Kurs — имя свойства.
- get — аксессор для чтения.
- return kurs; — возвращает значение поля kurs.
Обращение к полю kurs объекта alex через свойство:
Console.WriteLine(alex.Kurs); // Выведет значение поля kurs объекта alex
Создание свойства с аксессорами get и set и проверкой значений
Добавим аксессор set с проверкой допустимого диапазона (1-5):
public int Kurs
{
get { return kurs; }
set
{
if (value < 1) kurs = 1;
else if (value > 5) kurs = 5;
else kurs = value;
}
}
В аксессоре set:
- value — скрытая переменная, содержащая новое значение.
- Проверка value и присвоение полю kurs корректного значения.
Пример использования:
alex.Kurs = 3; // Запишет 3 в поле kurs
alex.Kurs = 6; // Запишет 5 в поле kurs (проверка сработала)
Зачем нужны свойства и аксессоры?
Преимущества свойств с аксессорами get и set перед публичными полями:
- Контроль доступа: Управление доступом к полям и валидация данных.
- Упрощение кода: Избегание дублирования кода для проверки и обработки данных.
- Удобство: Более читабельный и удобный способ доступа к полям, чем использование методов.
Автоматические свойства
Для простых свойств без дополнительной логики:
public int Kurs { get; set; }
Компилятор генерирует код аксессоров get и set. Модификаторы доступа get и set могут быть public, protected, internal или private, позволяя ограничить доступ к чтению или записи.
Свойства с аксессорами get и set создают более надежный и поддерживаемый код, обеспечивая контролируемый доступ к полям классов и упрощая обработку данных. Выбор между обычными и автоматическими свойствами зависит от необходимости дополнительной логики при доступе к полю.