Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 91
- Предыдущая
- 91/642
- Следующая
Использование перечислений, флагов и побитовых операций
Побитовые операции предлагают быстрый механизм для работы с двоичными числами на уровне битов. В табл. 4.3 представлены побитовые операции С#, описаны их действия и приведены примеры.

Чтобы взглянуть на побитовые операции в действии, создайте новый проект консольного приложения по имени
FunWithBitwiseOperationsProgram.csusing System;using FunWithBitwiseOperations;Console.WriteLine("===== Fun wih Bitwise Operations");Console.WriteLine("6 & 4 = {0} | {1}", 6 & 4, Convert.ToString((6 & 4),2));Console.WriteLine("6 | 4 = {0} | {1}", 6 | 4, Convert.ToString((6 | 4),2));Console.WriteLine("6 ^ 4 = {0} | {1}", 6 ^ 4, Convert.ToString((6 ^ 4),2));Console.WriteLine("6 << 1 = {0} | {1}", 6 << 1, Convert.ToString((6 << 1),2));Console.WriteLine("6 >> 1 = {0} | {1}", 6 >> 1, Convert.ToString((6 >> 1),2));Console.WriteLine("~6 = {0} | {1}", ~6, Convert.ToString(~((short)6),2));Console.WriteLine("Int.MaxValue {0}", Convert.ToString((int.MaxValue),2));Console.readLine();Ниже показан результат выполнения этого кода:
===== Fun wih Bitwise Operations6 & 4 = 4 | 1006 | 4 = 6 | 1106 ^ 4 = 2 | 106 << 1 = 12 | 11006 >> 1 = 3 | 11~6 = -7 | 11111111111111111111111111111001Int.MaxValue 1111111111111111111111111111111Теперь, когда вам известны основы побитовых операций, самое время применить их к перечислениям. Добавьте в проект новый файл по имени
ContactPreferenceEnum.csusing System;namespace FunWithBitwiseOperations{ [Flags] public enum ContactPreferenceEnum { None = 1, Email = 2, Phone = 4, Ponyexpress = 6 }}Обратите внимание на атрибут
FlagsEmailPhoneContactPreferenceEnum emailAndPhone = ContactPreferenceEnum.Email | ContactPreferenceEnum.Phone;В итоге появляется возможность проверки, присутствует ли одно из значений в объединенном значении. Например, если вы хотите выяснить, имеется ли значение
ContactPreferenceemailAndPhoneConsole.WriteLine("None? {0}", (emailAndPhone | ContactPreferenceEnum.None) == emailAndPhone);Console.WriteLine("Email? {0}", (emailAndPhone | ContactPreferenceEnum.Email) == emailAndPhone);Console.WriteLine("Phone? {0}", (emailAndPhone | ContactPreferenceEnum.Phone) == emailAndPhone);Console.WriteLine("Text? {0}", (emailAndPhone | ContactPreferenceEnum.Text) == emailAndPhone);В результате выполнения кода в окне консоли появляется следующий вывод:
None? FalseEmail? TruePhone? TrueText? FalseПонятие структуры (как типа значения)
Теперь, когда вы понимаете роль типов перечислений, давайте посмотрим, как использовать структуры .NET Core. Типы структур хорошо подходят для моделирования в приложении математических, геометрических и других "атомарных" сущностей. Структура (такая как перечисление) — это определяемый пользователем тип; тем не менее, структура не является просто коллекцией пар "имя-значение". Взамен структуры представляют собой типы, которые могут содержать любое количество полей данных и членов, действующих на таких полях.
На заметку! Если вы имеете опыт объектно-ориентированного программирования, тогда можете считать структуры "легковесными типами классов", т.к. они предоставляют способ определения типа, который поддерживает инкапсуляцию, но не может использоваться для построения семейства взаимосвязанных типов. Когда возникает потребность в создании семейства типов, связанных отношением наследования, необходимо применять классы.
На первый взгляд процесс определения и использования структур выглядит простым, но, как часто бывает, самое сложное скрыто в деталях. Чтобы приступить к изучению основ типов структур, создайте новый проект по имени
FunWithStructuresstructPointintstruct Point{- Предыдущая
- 91/642
- Следующая
