Определение и использование бит-маски в C#

Пример Понимание бит-масок в C# объясняет, как использовать бит маски. Чтобы определить битовую маску, просто создайте enum и присвойте ему атрибут Flags, как в следующем коде.

[Flags]
private enum BitmaskEnum
{
    Value1 = 1,
    Value2 = 2,
    Value3 = 4,
    Value4 = 8,
    Value5 = 16,
}

Если вы не укажете числовые значения для перечисляемых имен, перечисление даст им значения 1, 2, 3 и так далее. Если вы хотите, чтобы все имена отображали разные значения, вы должны установить их равными разным степеням 2, как в предыдущем коде. Затем вы можете комбинировать их в любой комбинации с помощью побитовых операторов.

Если вы не укажете числовые значения для перечисляемых имен, перечисление даст им значения 1, 2, 3 и так далее. Если вы хотите, чтобы все имена отображали разные значения, вы должны установить их равными разным степеням 2, как в предыдущем коде. Затем вы можете комбинировать их в любой комбинации с помощью побитовых операторов.

...

    Value3and5 = Value3 | Value5,

enum автоматически не делает значения равными степеням из двух, так что вы получаете с помощью атрибута Flags? Атрибут сообщает разработчикам кода и другим программам, что перечисления, отмеченные атрибутом, предназначены для бит-масок. Еще более полезным является тот факт, что он позволяет enum обрабатывать комбинированные значения при вызове метода ToString. Например, рассмотрим следующий код.

NormalEnum normal_value = NormalEnum.Value1 | NormalEnum.Value2;
BitmaskEnum bitmask_value = BitmaskEnum.Value1 | BitmaskEnum.Value2;

Каждое из этих операторов делает значение, которое объединяет два других значения. Определение кода NormalEnum совпадает с определением BitmaskEnum, за исключением того, что он не использует атрибут Flags. Оба общих значения: 1 | 2 = 0001 | 0010 = 0011 = 3.

При отображении вызова методов ToString значения, однако, C# знает, что bitmask_value является типом флага, поэтому он отображает его значение соответствующим образом. Следующий текст показывает, как программа отображает два значения.

normal_enum = 3
bitmask_enum = Value1, Value2

Пример программы отображает различные значения в TextBox при запуске. Например, следующий код показывает, как программа отображает значение NormalEnum.Value1.

txtValues.Text =
    NormalEnum.Value1 + " = " + (int)NormalEnum.Value1 + "\r\n" +
    ...

Сначала этот оператор отображает само значение. Программа автоматически преобразует ее в текст, поэтому результатом является имя перечислимого значения. Затем код добавляет значение, преобразованное в целое число, а затем новую строку. Код аналогично отображает другие значения.

Источник: http://csharphelper.com/blog/2016/10/define-and-use-bit-masks-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector