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

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

Жанры

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

struct Point

{

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

public int X;

public int Y;

// Специальный конструктор.

public Point(int XPos, int YPos)

{

X = XPos;

Y = YPos;

}

public (int XPos, int YPos) Deconstruct => (X, Y);

}

Новый

метод
Deconstruct
выделен полужирным. Его можно именовать как угодно, но обычно он имеет имя
Deconstruct
. В результате с помощью единственного вызова метода можно получить индивидуальные значения структуры путем возвращения кортежа:

Point p = new Point(7,5);

var pointValues = p.Deconstruct;

Console.WriteLine($"X is: {pointValues.XPos}");

Console.WriteLine($"Y is: {pointValues.YPos}");

Деконструирование кортежей с позиционным сопоставлением с образцом (нововведение в версии 8.0)

Когда кортежи имеют доступный метод

Deconstruct
, деконструирование можно применять в выражении
switch
, основанном на кортежах. Следующий код полагается на пример
Point
и использует значения сгенерированного кортежа в конструкциях
when
выражения
switch
:

static string GetQuadrant1(Point p)

{

return p.Deconstruct switch

{

(0, 0) => "Origin",

var (x, y) when x > 0 && y > 0 => "One",

var (x, y) when x < 0 && y > 0 => "Two",

var (x, y) when x < 0 && y < 0 => "Three",

var (x, y) when x > 0 && y < 0 => "Four",

var (_, _) => "Border",

};

}

Если метод

Deconstruct
определен с двумя параметрами
out
, тогда выражение
switch
будет автоматически деконструировать экземпляр
Point
. Добавьте к
Point
еще один метод
Deconstruct
:

public void Deconstruct(out int XPos, out int YPos)

=> (XPos,YPos)=(X, Y);

Теперь можно модифицировать (или добавить новый) метод

GetQuadrant
, как показано ниже:

static string GetQuadrant2(Point p)

{

return p switch

{

(0, 0) => "Origin",

var (x, y) when x > 0 && y > 0 => "One",

var (x, y) when x < 0 && y > 0 => "Two",

var (x, y) when x < 0 && y < 0 => "Three",

var (x, y) when x > 0 && y < 0 => "Four",

var (_, _) => "Border",

};

}

Изменение

очень тонкое (и выделено полужирным). В выражении
switch
вместо вызова
р.Deconstruct
применяется просто переменная
Point
.

Резюме

Глава начиналась с исследования массивов. Затем обсуждались ключевые слова С#, которые позволяют строить специальные методы. Вспомните, что по умолчанию параметры передаются по значению; тем не менее, параметры можно передавать и по ссылке, пометив их модификаторами

ref
или
out
. Кроме того, вы узнали о роли необязательных и именованных параметров, а также о том, как определять и вызывать методы, принимающие массивы параметров.

После рассмотрения темы перегрузки методов в главе приводились подробные сведения, касающиеся способов определения перечислений и структур в C# и их представления в библиотеках базовых классов .NET Core. Попутно рассматривались основные характеристики типов значений и ссылочных типов, включая их поведение при передаче в качестве параметров методам, а также способы взаимодействия с типами данных, допускающими

null
, и переменными, которые могут иметь значение
null
(например, переменными ссылочных типов и переменными типов значений, допускающих
null
), с использованием операций
?
,
??
и
??=
.

Финальный раздел был посвящен давно ожидаемому средству в языке C# — кортежам. После выяснения, что они собой представляют и как работают, кортежи применялись для возвращения множества значений из методов и для деконструирования специальных типов. В главе 5 вы начнете погружаться в детали объектно-ориентированного программирования.

Часть III

Объектно-ориентированное программирование на C#

Глава 5

Инкапсуляция

В главах 3 и 4 было исследовано несколько основных синтаксических конструкций, присущих любому приложению .NET Core, которое вам придется разрабатывать. Начиная с данной главы, мы приступаем к изучению объектно-ориентированных возможностей языка С#. Первым, что вам предстоит узнать, будет процесс построения четко определенных типов классов, которые поддерживают любое количество конструкторов. После введения в основы определения классов и размещения объектов остаток главы будет посвящен теме инкапсуляции. В ходе изложения вы научитесь определять свойства классов, а также ознакомитесь с подробными сведениями о ключевом слове

static
, синтаксисе инициализации объектов, полях только для чтения, константных данных и частичных классах.

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

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

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

Девятый

Каменистый Артем
1. Девятый
Фантастика:
боевая фантастика
попаданцы
9.15
рейтинг книги
Девятый

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Саженец

Ланцов Михаил Алексеевич
3. Хозяин дубравы
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Саженец

Свет во мраке

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

(Не)свободные, или Фиктивная жена драконьего военачальника

Найт Алекс
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
(Не)свободные, или Фиктивная жена драконьего военачальника

Вамп

Парсиев Дмитрий
3. История одного эволюционера
Фантастика:
рпг
городское фэнтези
постапокалипсис
5.00
рейтинг книги
Вамп

Инвестиго, из медика в маги 2

Рэд Илья
2. Инвестиго
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Инвестиго, из медика в маги 2

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

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

Хозяин Теней 2

Петров Максим Николаевич
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 2

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

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

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

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

Двойник Короля 2

Скабер Артемий
2. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля 2