Разработка структур

Примечание.

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

Тип значения общего назначения чаще всего называется структурой. Он является ключевым словом C#. В этом разделе приводятся рекомендации по разработке общих структур.

❌НЕ предоставляйте для структуры конструктор без параметров.

Следуя этой рекомендации, можно создавать массивы структур, не запуская конструктор для каждого элемента массива. Обратите внимание, что C# не разрешает структурам использовать конструкторы без параметров.

❌ НЕ ОПРЕДЕЛЯЙТЕ изменяемые типы значений.

Изменяемые типы значений имеют несколько проблем. Например, когда метод получения свойства возвращает тип значения, вызывающий объект получает копию. Так как копия создается неявным образом, разработчики могут не знать, что они изменяют копию, а не исходное значение. Кроме того, для некоторых языков (в частности динамических языков) есть проблемы с использованием изменяемых типов значений, так как даже локальные переменные при разыменовании приводят к созданию копии.

✔️ Убедитесь, что состояние, в котором все данные экземпляра имеют значение 0, false или NULL (по необходимости), допустимо.

Это предотвратит случайное создание недопустимых экземпляров во время создания массива структур.

✔️ РЕАЛИЗУЙТЕ IEquatable<T> для типов значений.

Метод Object.Equals для типов значений приводит к тому, что упаковка-преобразование и реализация по умолчанию не очень эффективны, так как используется отражение. Метод Equals может иметь гораздо более высокую производительность. Его можно реализовать таким образом, чтобы избежать упаковки-преобразования.

❌ НЕ расширяйте явным образом ValueType. На самом деле это не рекомендуется для большинства языков.

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

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

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

См. также