Язык программирования C#9 и платформа .NET5
public void Deconstruct(out int XPos, out int YPos)=> (XPos,YPos)=(X, Y);Теперь можно модифицировать (или добавить новый) метод
, как показано ниже:GetQuadrant()static string GetQuadrant2(Point p){<b> return p switch</b>{(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Знакомство с типом класса C#
С точки зрения платформы .NET Core наиболее фундаментальной программной конструкцией является тип класса. Формально класс — это определяемый пользователем тип, состоящий из полей данных (часто называемых переменными-членами) и членов, которые оперируют полями данных (к ним относятся конструкторы, свойства, методы, события и т.д.). Коллективно набор полей данных представляет "состояние" экземпляра класса (также известного как объект). Мощь объектно-ориентированных языков, таких как С#, заключается в том, что за счет группирования данных и связанной с ними функциональности в унифицированное определение класса вы получаете возможность моделировать свое программное обеспечение в соответствии с сущностями реального мира.
Для начала создайте новый проект консольного приложения C# по имени
. Затем добавьте в проект новый файл класса (SimpleClassExample). Поместите в файлCar.csоператорCar.csи определите пространство имен, как показано ниже:usingusing System;namespace SimpleClassExample{}На заметку! В приводимых далее примерах определять пространство имен строго обязательно. Однако рекомендуется выработать привычку использовать пространства имен во всем коде, который вы будете писать. Пространства имен подробно обсуждались в главе 1.
Класс определяется в C# с применением ключевого слова
. Вот как выглядит простейшее объявление класса (позаботьтесь о том, чтобы объявление класса находилось внутри пространства именclass):SimpleClassExampleclass Car{}После определения типа класса необходимо определить набор переменных-членов, которые будут использоваться для представления его состояния. Например, вы можете принять решение, что объекты
(автомобили) должны иметь поле данных типаCar, представляющее текущую скорость, и поле данных типаintдля представления дружественного названия автомобиля. С учетом таких начальных проектных положений классstringбудет выглядеть следующим образом:Carclass Car{// 'Состояние' объекта Car.public string petName;public int currSpeed;}