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

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

Жанры

Язык программирования 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
в данном случае) перед использованием структуры, то компилятор сообщит об ошибке:

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

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Вадбольский

Никитин Юрий Александрович
1. Вадбольский
Фантастика:
попаданцы
5.00
рейтинг книги
Вадбольский

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Таня Гроттер и магический контрабас

Емец Дмитрий Александрович
1. Таня Гроттер
Фантастика:
фэнтези
8.52
рейтинг книги
Таня Гроттер и магический контрабас

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

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

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

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

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

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

Потусторонний. Книга 1

Погуляй Юрий Александрович
1. Господин Артемьев
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Потусторонний. Книга 1