Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 116
- Предыдущая
- 116/642
- Следующая

В текущей главе рассматриваются только ключевые слова
publicprivateinternalprotected internalprotectedИспользование стандартных модификаторов доступа
По умолчанию члены типов являются неявно закрытыми (
privateinternalinternalprivate// Внутренний класс с закрытым стандартным конструктором.class Radio{ Radio(){}}Если вы предпочитаете явное объявление, тогда можете добавить соответствующие ключевые слова без каких-либо негативных последствий (помимо дополнительных усилий по набору):
// Внутренний класс с закрытым стандартным конструктором.internal class Radio{ private Radio(){}}Чтобы позволить другим частям программы обращаться к членам объекта, вы должны определить эти члены с ключевым словом
publicprotectedRadiopublic// Открытый класс с открытым стандартным конструктором.public class Radio{ public Radio(){}}Использование модификаторов доступа и вложенных типов
Как упоминалось в табл. 5.1, модификаторы доступа
privateprotectedprotected internalprivate protectedCarColorSportsCarpublic class SportsCar{ // Нормально! Вложенные типы могут быть помечены как private. private enum CarColor { Red, Green, Blue }}Здесь допустимо применять модификатор доступа
privateSportsCarpublicinternal// Ошибка! Невложенный тип не может быть помечен как private!public class Radio{ public Radio(){}}Первый принцип объектно-ориентированного программирования: службы инкапсуляции C#
Концепция инкапсуляции вращается вокруг идеи о том, что данные класса не должны быть напрямую доступными через его экземпляр. Наоборот, данные класса определяются как закрытые. Если пользователь объекта желает изменить его состояние, тогда он должен делать это косвенно, используя открытые члены. Чтобы проиллюстрировать необходимость в службах инкапсуляции, предположим, что создано такое определение класса:
// Класс с единственным открытым полем.class Book{ public int numberOfPages;}Проблема с открытыми данными заключается в том, что сами по себе они неспособны "понять", является ли присваиваемое значение допустимым с точки зрения текущих бизнес-правил системы. Как известно, верхний предел значений для типа
int// Хм... Ничего себе мини-новелла!Book miniNovel = new Book();miniNovel.numberOfPages = 30_000_000;Хотя границы типа данных
intНа заметку! Говоря точнее, члены класса, которые представляют состояние объекта, не должны помечаться как
publicИнкапсуляция предлагает способ предохранения целостности данных состояния для объекта. Вместо определения открытых полей (которые могут легко привести к повреждению данных) необходимо выработать у себя привычку определять закрытые данные, управление которыми осуществляется опосредованно с применением одного из двух главных приемов:
- Предыдущая
- 116/642
- Следующая
