Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

using System;

namespace FunWithBitwiseOperations

{

[Flags]

public enum ContactPreferenceEnum

{

None = 1,

Email = 2,

Phone = 4,

Ponyexpress = 6

}

}

Обратите внимание на атрибут

Flags
.
Он позволяет объединять множество значений из перечисления в одной переменной. Скажем, вот как можно объединить
Email
и
Phone
:

ContactPreferenceEnum emailAndPhone = ContactPreferenceEnum.Email |

ContactPreferenceEnum.Phone;

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

ContactPreference
в переменной
emailAndPhone
, то можете написать такой код:

Console.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? False

Email? True

Phone? True

Text? False

Понятие структуры (как типа значения)

Теперь, когда вы понимаете роль типов перечислений, давайте посмотрим, как использовать структуры .NET Core. Типы структур хорошо подходят для моделирования в приложении математических, геометрических и других "атомарных" сущностей. Структура (такая как перечисление) — это определяемый пользователем тип; тем не менее, структура не является просто коллекцией пар "имя-значение". Взамен структуры представляют собой типы, которые могут содержать любое количество полей данных и членов, действующих на таких полях.

На заметку! Если вы имеете опыт объектно-ориентированного программирования, тогда можете считать структуры "легковесными типами классов", т.к. они предоставляют способ определения типа, который поддерживает инкапсуляцию, но не может использоваться для построения семейства взаимосвязанных типов. Когда возникает потребность в создании семейства типов, связанных отношением наследования, необходимо применять классы.

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

FunWithStructures
. В языке C# структуры определяются с применением ключевого слова
struct
. Определите новую структуру по имени
Point
, представляющую точку,
которая содержит две переменные типа
int
и набор методов для взаимодействия с ними:

struct Point

{

// Поля структуры.

public int X;

public int Y;

// Добавить 1 к позиции (X, Y).

public void Increment

{

X++; Y++;

}

// Вычесть 1 из позиции (X, Y).

public void Decrement

{

X--; Y--;

}

// Отобразить текущую позицию.

public void Display

{

Console.WriteLine("X = {0}, Y = {1}", X, Y);

}

}

Здесь определены два целочисленных поля (

X
и
Y
) с использованием ключевого слова
public
, которое является модификатором управления доступом (их обсуждение будет продолжено в главе 5). Объявление данных с ключевым словом
public
обеспечивает вызывающему коду возможность прямого доступа к таким данным через переменную типа
Point
(посредством операции точки).

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

Вот код, который позволяет протестировать тип

Point
:

Console.WriteLine("***** A First Look at Structures *****\n");

// Создать начальную переменную типа Point.

Point myPoint;

myPoint.X = 349;

myPoint.Y = 76;

myPoint.Display;

// Скорректировать значения X и Y.

myPoint.Increment;

myPoint.Display;

Console.ReadLine;

Вывод выглядит вполне ожидаемо:

***** A First Look at Structures *****

X = 349, Y = 76

X = 350, Y = 77

Создание переменных типа структур

Для создания переменной типа структуры на выбор доступно несколько вариантов. В следующем коде просто создается переменная типа

Point
и затем каждому ее открытому полю данных присваиваются значения до того, как обращаться к членам переменной. Если не присвоить значения открытым полям данных (
X
и
Y
в данном случае) перед использованием структуры, то компилятор сообщит об ошибке:

Поделиться:
Популярные книги

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Попаданка

Ахминеева Нина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка

Возлюби болезнь свою

Синельников Валерий Владимирович
Научно-образовательная:
психология
7.71
рейтинг книги
Возлюби болезнь свою

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Ротмистр Гордеев 2

Дашко Дмитрий
2. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев 2

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Жребий некроманта 3

Решетов Евгений Валерьевич
3. Жребий некроманта
Фантастика:
боевая фантастика
5.56
рейтинг книги
Жребий некроманта 3

Город драконов

Звездная Елена
1. Город драконов
Фантастика:
фэнтези
6.80
рейтинг книги
Город драконов

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец