День двести девятый. #BestPractices

Советы по разработке типов

6. Разработка перечислений. Окончание

Разработка битовых флагов

ИСПОЛЬЗУЙТЕ атрибут System.FlagsAttribute для пометки битовых флагов. Не применяйте этот атрибут к простым перечислениям.

ИСПОЛЬЗУЙТЕ степени двойки для значений битовых флагов, чтобы их можно было свободно комбинировать с помощью операции побитового ИЛИ.

⚠️ РАССМОТРИТЕ предоставление специальных значений для часто используемых комбинаций флагов. Побитовые операции не должны требоваться для простых задач. Например: ReadWrite (комбинация значений Read и Write).

ИЗБЕГАЙТЕ создания битовых флагов, где определенные комбинации значений недопустимы.

ИСПОЛЬЗУЙТЕ название None для нулевого значения битовых флагов. В этом случае оно всегда должно означать «все флаги сняты».

ИЗБЕГАЙТЕ использования нулевого значения битовых флагов, если только оно не означает «все флаги сняты» и не названо соответствующим образом.



Добавление значения к перечислению

Очень часто обнаруживается, что вам нужно добавить значения в перечисление после того, как оно уже выпущено в одной из версий программы. Существует потенциальная проблема совместимости приложений при возвращении нового значения из существующего API, поскольку плохо написанные приложения могут неправильно обрабатывать новое значение.

⚠️ РАССМОТРИТЕ добавление значений к перечислениям, несмотря на небольшой риск несовместимости.

Если у вас есть реальные данные о несовместимости приложений, вызванной добавлением значений в перечисление, рассмотрите возможность добавления нового API, который возвращает и новые, и старые значения, и пометьте старый API как устаревший, который должен продолжать возвращать только старые значения. Это обеспечит совместимость существующих приложений.



Продолжение следует…



Источник: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/