Разработка полей

Примечание.

Это содержимое перепечатывается разрешением Pearson Education, Inc. из руководства по проектированию платформы: соглашения, идиомы и шаблоны для повторно используемых библиотек .NET, 2-го выпуска. Этот выпуск был опубликован в 2008 году, и книга с тех пор была полностью пересмотрена в третьем выпуске. Некоторые сведения на этой странице могут быть устаревшими.

Принцип инкапсуляции — одна из наиболее важных концепций объектно-ориентированного проектирования. Этот принцип указывает, что данные, хранящиеся внутри объекта, должны быть доступны только для этого объекта.

Чтобы истолковать принцип, достаточно сказать, что тип должен быть спроектирован таким образом, чтобы изменения полей этого типа (изменения имени или типа) можно было выполнять без нарушения кода, не относящегося к элементам типа. Такая интерпретация подразумевает, что все поля должны быть закрытыми.

Мы исключили константные и статические поля только для чтения из этого строгого ограничения, так как такие поля практически по определению не требуют изменения.

❌ НЕ следует предоставлять открытые или защищенные поля экземпляров.

Необходимо предоставить свойства для доступа к полям вместо того, чтобы сделать их открытыми или защищенными.

✔️ ИСПОЛЬЗУЙТЕ константные поля для констант, которые никогда не изменятся.

Компилятор записывает значения константных полей непосредственно в вызывающий код. Поэтому значения-константы невозможно изменить без риска нарушения совместимости.

✔️ ИСПОЛЬЗУЙТЕ открытые статические поля readonly для предопределенных экземпляров объектов.

При наличии предопределенных экземпляров типа объявите их как открытые статические поля только для чтения самого типа.

❌ НЕ присваивайте полям readonly экземпляры изменяемых типов.

Изменяемый тип — это тип с экземплярами, которые можно изменить после создания экземпляра. Например, массивы, большинство коллекций и потоки являются изменяемыми типами, но System.Int32, System.Uri и System.String являются неизменяемыми. Модификатор только для чтения в поле ссылочного типа предотвращает замену экземпляра, хранящегося в поле, но не предотвращает изменение данных экземпляра поля путем вызова элементов, изменяющих экземпляр.

Фрагменты: © Корпорация Майкрософт (Microsoft Corporation), 2005, 2009. Все права защищены.

Перепечатано с разрешения Pearson Education, Inc. из книги Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET (2-е издание), авторы: Кржиштоф Цвалина (Krzysztof Cwalina) и Брэд Абрамс (Brad Abrams). Книга опубликована 22 октября 2008 г. издательством Addison-Wesley Professional в рамках серии, посвященной разработке для Microsoft Windows.

См. также