Новости

17.11.2021

Книга «C# 9 и .NET 5. Разработка и оптимизация»

В первой части книги рассмотрены основы C#, включая объектно-ориентированное программирование и новые возможности C# 9, такие как создание экземпляров новых объектов с целевым типом и работа с неизменяемыми типами с использованием ключевого слова record. Во второй части рассматриваются API .NET для выполнения таких задач, как управление данными и запросы к ним, мониторинг и повышение производительности, а также работа с файловой системой, асинхронными потоками, сериализацией и шифрованием. В третьей части на примерах кросс-платформенных приложений вы сможете собрать и развернуть собственные: например, веб-приложения с использованием ASP.NET Core или мобильные приложения на Xamarin Forms.
К концу книги вы приобретете знания и навыки, необходимые для использования C# 9 и .NET 5 для разработки сервисов, веб- и мобильных приложений.

Реализация интерфейсов и наследование классов


Данная глава посвящена созданию новых типов на основе существующих с использованием объектно-ориентированного программирования (ООП). Вы узнаете о том, как определять операции и локальные функции для выполнения простых действий, как определять делегаты и события для обмена сообщениями между типами, как реализовывать интерфейсы для разработки общей функциональности, и о дженериках. Кроме того, узнаете о разнице между ссылочными типами и типами значений, о том, как создавать новые классы, наследуя их от базовых для многократного применения функциональности, как переопределять член типа, использовать полиморфизм, создавать методы расширения и выполнять приведение классов в иерархии наследования.

В этой главе:

  • настройка библиотеки классов и консольного приложения;
  • упрощение методов;
  • вызов и обработка событий;
  • реализация интерфейсов;
  • оптимизация типов под многократное использование с помощью дженериков;
  • управление памятью с помощью ссылочных типов и типов значений;
  • наследование классов;
  • приведение в иерархиях наследования;
  • наследование и расширение типов .NET.

Настройка библиотеки классов и консольного приложения


Мы начнем с определения рабочей области с двумя проектами, подобного созданному в главе 5. Если вы выполнили все упражнения в той главе, то можете открыть созданную тогда рабочую область и продолжить работу.

В противном случае следуйте приведенным ниже инструкциям.

1. В существующей папке Code создайте папку Chapter06 с двумя подпапками, PacktLibrary и PeopleApp, как показано в следующей иерархии:

  • Chapter06


— PacktLibrary
— PeopleApp

2. Запустите программу Visual Studio Code.
3. Выберите команду меню File ->Save Workspace As (Файл -> Сохранить рабочую область как), введите имя Chapter06 и нажмите кнопку Save (Сохранить).
4. Выберите команду меню File->Add Folder to Workspace (Файл->Добавить папку в рабочую область), выберите папку PacktLibrary и нажмите кнопку Add (Добавить).
5. Выберите команду меню File->Add Folder to Workspace (Файл->Добавить папку в рабочую область), выберите папку PeopleApp и нажмите кнопку Add (Добавить).
6. Выберите команду меню Terminal->New Terminal (Терминал->Новый терминал) и выберите PacktLibrary.
7. На панели TERMINAL (Терминал) введите следующую команду:

8. Выберите команду меню Terminal->New Terminal (Терминал->Новый терминал) и выберите PeopleApp.
9. На панели TERMINAL (Терминал) введите следующую команду:

10. На панели EXPLORER (Проводник) в проекте PacktLibrary переименуйте файл Class1.cs в Person.cs.
11. Измените содержимое файла:

12. На панели EXPLORER (Проводник) разверните папку PeopleApp и щелкните кнопкой мыши на файле PeopleApp.csproj.
13. Добавьте ссылку на проект в PacktLibrary:

14. На панели TERMINAL (Терминал) для папки PeopleApp введите команду dotnet build и обратите внимание на выведенную информацию, указывающую, что оба проекта были успешно созданы.
15. Добавьте операторы в класс Person для определения трех полей и метода, как показано ниже:

Упрощение методов


Сделаем так, чтобы два экземпляра человека произвели потомство. Мы можем реализовать это, написав методы. Методы экземпляра — действия, которые объект выполняет для себя; статические методы — действия, которые выполняет сам тип. Ваш выбор зависит от того, что больше всего подходит для действия.

Имеет смысл использовать статические методы и методы экземпляров для выполнения аналогичных действий. Например, тип string имеет как статический метод Compare, так и метод экземпляра CompareTo. Это позволяет программистам, применяющим ваш тип, выбрать, как задействовать функциональность, тем самым увеличивая гибкость.

 

Реализация функционала с помощью методов


Начнем с реализации некоторых функций, используя методы.

1. Добавьте один метод экземпляра и один статический метод в класс Person, который позволит двум объектам Person производить потомство:

 

Обратите внимание на следующие моменты:

  • в статическом методе static с именем Procreate объекты Person для создания передаются как параметры с именами p1 и p2;
  • новый класс Person с именем baby создается с именем, составленным из комбинации двух человек, которые произвели потомство;
  • объект baby добавляется в коллекцию Children обоих родителей, а затем возвращается. Классы — это ссылочные типы, то есть добавляется ссылка на объект baby, сохраненный в памяти, но не копия объекта;
  • в методе экземпляра ProcreateWith объект Person, для которого производится потомство, передается в качестве параметра partner, и он вместе с this передается статическому методу Procreate для повторного использования реализации метода. Ключевое слово this ссылается на текущий экземпляр класса.

Метод, который создает новый объект или модифицирует существующий объект, должен возвращать ссылку на этот объект, чтобы вызывающая сторона могла видеть результаты.

2. В проекте PeopleApp в начале файла Program.cs импортируйте пространство имен для нашего класса и статически импортируйте тип Console, как показано ниже:

3. В методе Main создайте трех человек, у которых появятся дети, отметив, что для добавления символа двойной кавычки в строку необходимо поставить перед ним символ обратной косой черты с кавычкой, \":

4. Запустите приложение и проанализируйте результат:

Реализация функционала с помощью операций


Класс System.String имеет статический метод Concat, который объединяет два строковых значения и возвращает результат:

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

Хорошо известная библейская фраза «Плодитесь и размножайтесь», то есть «производите потомство». Напишем код так, чтобы символ * (умножение) позволял создавать два объекта Person.

Мы делаем это путем определения статической операции для символа *. Синтаксис скорее похож на метод, поскольку, по сути, операция — это метод, но вместо имени метода используется символ, что сокращает синтаксис.

Символ * — лишь один из многих символов, которые можно использовать в качестве операции. Полный список символов приведен на сайте docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/statements-expressions-operators/overloadable-operators.

С полным содержанием статьи можно ознакомиться на сайте "Хабрахабр":

https://habr.com/ru/company/piter/blog/585370/


Комментарии: 0

Пока нет комментариев


Оставить комментарий






CAPTCHAОбновить изображение

Наберите текст, изображённый на картинке

Все поля обязательны к заполнению.

Перед публикацией комментарии проходят модерацию.