Книга «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/

    Источник



    Leave A Reply

    Your email address will not be published.