classProgram { static void Main()
{ Student st1 = new Student("Иванов", 3); st1.ShowInfo(); Student st2 = new Student("", ‐7); st2.ShowInfo(); Console.ReadKey();
} } Протестируем программу с разными параметрами. Существенный недо-
статок – незащищенность от ввода абсурдных данных (например, можно ввести, что студент st2 не имеет фамилии и учится на отрицательном курсе –7.
Инкапсулируемданные (скроем и защитим поля), создав свойства с ме- тодами set и get для управления доступом к полям. Система Visual Studio поз- воляет автоматизировать этот процесс.
Для этого устанавливаем курсор на имя_поля (например, fam), в меню Рефакторинг (Refactoring) выбираем пункт Инкапсулироватьполе (Incapsulate field), в пункте обновление ссылок указываем Все и нажимаем OK. В появив- шемся диалоговом окно Просмотризмененийссылок, показываются предлага- емые замены полей на свойства (как правило, это все методы и объекты, исполь- зующие значения полей, кроме конструкторов!). Соглашаемся с предложением, нажимая Применить. Доступ к полю fam будет изменен на private (закрытый) и методом Fam сгенерирован шаблон общедоступного свойства с именем Fam (с большой буквы), которое и будет использоваться теперь вместо поля fam.
Создадим свои правила доступа. Для этого будем вводить необходимый код в автоматически сгенерированные шаблоны set и get. Например, все фами- лии будем хранить большими буквами (преобразование зададим в блоке set). А если фамилия не введена (поле fam пустое), то блок get будет возвращать значение «неизвестный». Измененный фрагмент кода будет выглядеть так:
private string fam; // поле стало закрытым
public string Fam // сгененрировано свойство