LoveRead.info » Книги » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

Книга Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читать онлайн бесплатно без регистрации

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 110 111 112 113 114 115 116 117 118 ... 407
    Перейти на страницу:
    IShape : IDrawable, IPrintable

      {

        int GetNumberOfSides();

      }

    }

    На рис. 8.6 показана текущая иерархия интерфейсов.

    Главный вопрос: сколько методов должен реализовывать класс, поддерживающий IShape? Ответ: в зависимости от обстоятельств. Если вы хотите предоставить простую реализацию метода Draw(), тогда вам необходимо реализовать только три члена, как иллюстрируется в следующем типе Rectangle:

    using System;

    namespace MiInterfaceHierarchy

    {

      class Rectangle : IShape

      {

        public int GetNumberOfSides() => 4;

        public void Draw() => Console.WriteLine("Drawing...");

        public void Print() => Console.WriteLine("Printing...");

      }

    }

    Если вы предпочитаете располагать специфическими реализациями для каждого метода Draw() (что в данном случае имеет смысл), то конфликт имен можно устранить с использованием явной реализации интерфейсов, как делается в представленном далее типе Square:

    namespace MiInterfaceHierarchy

    {

      class Square : IShape

      {

        // Использование явной реализации для устранения

        // конфликта имен членов.

        void IPrintable.Draw()

        {

          // Вывести на принтер...

        }

        void IDrawable.Draw()

        {

          // Вывести на экран...

        }

        public void Print()

        {

          // Печатать...

        }

        public int GetNumberOfSides() => 4;

      }

    }

    В идеале к данному моменту вы должны лучше понимать процесс определения и реализации специальных интерфейсов с применением синтаксиса С#. По правде говоря, привыкание к программированию на основе интерфейсов может занять определенное время, так что если вы находитесь в некотором замешательстве, то это совершенно нормальная реакция.

    Однако имейте в виду, что интерфейсы являются фундаментальным аспектом .NET Core. Независимо от типа разрабатываемого приложения (веб-приложение, настольное приложение с графическим пользовательским интерфейсом, библиотека доступа к данным и т.п.) работа с интерфейсами будет составной частью этого процесса. Подводя итог, запомните, что интерфейсы могут быть исключительно полезны в следующих ситуациях:

    • существует единственная иерархия, в которой общее поведение поддерживается только подмножеством производных типов;

    • необходимо моделировать общее поведение, которое встречается в нескольких иерархиях, не имеющих общего родительского класса кроме System.Object.

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

    Интерфейсы IEnumerable и IEnumerator

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

    // Итерация по массиву элементов.

    int[] myArrayOfInts = {10, 20, 30, 40};

    foreach(int i in myArrayOfInts)

    {

      Console.WriteLine(i);

    }

    Хотя может показаться, что данная конструкция подходит только для массивов, на самом деле foreach разрешено использовать с любым типом, который поддерживает метод GetEnumerator(). В целях иллюстрации создайте новый проект консольного приложения по имени CustomEnumerator. Скопируйте в новый проект файлы Car.cs и Radio.cs из проекта SimpleException, рассмотренного в главе 7. Не забудьте поменять пространства имен для классов на CustomEnumerator.

    Теперь вставьте в проект новый класс Garage (гараж), который хранит набор объектов Car (автомобиль) внутри System.Array:

    using System.Collections;

    namespace CustomEnumerator

    {

      // Garage содержит набор объектов Car.

      public class Garage

      {

        private Car[] carArray = new Car[4];

        // При запуске заполнить несколькими объектами Car.

        public Garage()

        {

          carArray[0] = new Car("Rusty", 30);

          carArray[1] = new Car("Clunker", 55);

          carArray[2] = new Car("Zippy", 30);

          carArray[3] = new Car("Fred", 30);

        }

      }

    }

    В идеальном случае было бы удобно проходить по внутренним элементам объекта Garage с применением конструкции foreach как в ситуации с массивом значений данных:

    using System;

    using CustomEnumerator;

    // Код выглядит корректным...

    Console.WriteLine("***** Fun with IEnumerable / IEnumerator *****n");

    Garage carLot = new Garage();

    // Проход по всем объектам Car в коллекции?

    foreach (Car c in carLot)

    {

      Console.WriteLine("{0} is going {1} MPH",

        c.PetName, c.CurrentSpeed);

    }

    Console.ReadLine();

    К сожалению, компилятор информирует о том, что в классе Garage не реализован метод по имени GetEnumerator(), который формально определен в интерфейсе IEnumerable, находящемся в пространстве имен System.Collections.

    На заметку! В главе 10 вы узнаете о роли обобщений и о пространстве имен System.Collections.Generic. Как будет показано, это пространство имен содержит обобщенные версии интерфейсов IEnumerable/IEnumerator, которые предлагают более безопасный к типам способ итерации по элементам.

    Классы или структуры, которые поддерживают такое поведение, позиционируются как способные предоставлять вызывающему коду доступ к элементам, содержащимся внутри них (в рассматриваемом примере самому ключевому слову foreach). Вот определение этого стандартного интерфейса:

    // Данный интерфейс информирует вызывающий код о том,

    // что элементы объекта могут перечисляться

    public interface IEnumerable

    {

       IEnumerator GetEnumerator();

    }

    Как видите, метод GetEnumerator() возвращает ссылку на еще один интерфейс по имени System.Collections.IEnumerator, обеспечивающий инфраструктуру, которая позволяет вызывающему коду обходить внутренние объекты, содержащиеся в совместимом с IEnumerable контейнере:

    // Этот интерфейс позволяет вызывающему коду получать элементы контейнера.

    public interface IEnumerator

    {

       bool MoveNext ();   // Переместить вперед внутреннюю позицию курсора.

       object Current { get;}  // Получить текущий элемент

                               // (свойство только для чтения).

       void Reset (); // Сбросить курсор в позицию перед первым элементом.

    }

    Если вы хотите обновить тип Garage для поддержки этих интерфейсов, то можете пойти длинным путем и реализовать каждый метод вручную. Хотя вы определенно вольны предоставить специализированные версии методов GetEnumerator(), MoveNext(), Current и

    1 ... 110 111 112 113 114 115 116 117 118 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    2. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    3. Елена Елена08 июнь 11:13 Прочла несколько романов этого, без сомнения, талантливого автора. Впечатление прекрасное, но хотелось бы когда-нибудь прочесть... Предатель. Ты врал мне годами - Арина Арская
    Все комметарии
    Новинки бесплатной онлайн библиотеки