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

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

Жанры

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

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

Безымянный раб [Другая редакция]

Зыков Виталий Валерьевич
1. Дорога домой
Фантастика:
боевая фантастика
9.41
рейтинг книги
Безымянный раб [Другая редакция]

Измена. Свадьба дракона

Белова Екатерина
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Измена. Свадьба дракона

Не грози Дубровскому! Том VIII

Панарин Антон
8. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том VIII

Последняя Арена 7

Греков Сергей
7. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 7

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Все не так, как кажется

Юнина Наталья
Любовные романы:
современные любовные романы
7.70
рейтинг книги
Все не так, как кажется

Я же бать, или Как найти мать

Юнина Наталья
Любовные романы:
современные любовные романы
6.44
рейтинг книги
Я же бать, или Как найти мать

Боярышня Дуняша

Меллер Юлия Викторовна
1. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Дуняша

Аромат невинности

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
эро литература
9.23
рейтинг книги
Аромат невинности

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

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

Свет во мраке

Михайлов Дем Алексеевич
8. Изгой
Фантастика:
фэнтези
7.30
рейтинг книги
Свет во мраке

Приручитель женщин-монстров. Том 3

Дорничев Дмитрий
3. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 3

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Безродный

Коган Мстислав Константинович
1. Игра не для слабых
Фантастика:
боевая фантастика
альтернативная история
6.67
рейтинг книги
Безродный