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 ... 91 92 93 94 95 96 97 98 99 ... 407
    Перейти на страницу:
    в цепочке наследования он находится выше, чем Employee, компилятор не разрешит неявное приведение, стараясь сохранить ваш код насколько возможно безопасным в отношении типов.

    Несмотря на то что сами вы можете выяснить, что ссылка object указывает в памяти на объект совместимого с Employee класса, компилятор сделать подобное не в состоянии, поскольку это не будет известно вплоть до времени выполнения. Чтобы удовлетворить компилятор, понадобится применить явное приведение, которое и является вторым правилом: в таких случаях вы можете явно приводить "вниз", используя операцию приведения С#. Базовый шаблон, которому нужно следовать при выполнении явного приведения, выглядит так:

    (класс_к_которому_нужно_привести) существующая_ссылка

    Таким образом, чтобы передать переменную типа object методу GivePromotion(), потребуется написать следующий код:

    // Правильно!

    GivePromotion((Manager)frank);

    Использование ключевого слова as

    Имейте в виду, что явное приведение оценивается во время выполнения, а не на этапе компиляции. Ради иллюстрации предположим, что проект Employees содержит копию класса Hexagon, созданного ранее в главе. Для простоты вы можете добавить в текущий проект такой класс:

    class Hexagon

    {

      public void Draw()

      {

        Console.WriteLine("Drawing a hexagon!");

      }

    }

    Хотя приведение объекта сотрудника к объекту фигуры абсолютно лишено смысла, код вроде показанного ниже скомпилируется без ошибок:

    // Привести объект frank к типу Hexagon невозможно,

    // но этот код нормально скомпилируется!

    object frank = new Manager();

    Hexagon hex = (Hexagon)frank;

    Тем не менее, вы получите ошибку времени выполнения, или более формально — исключение времени выполнения. В главе 7 будут рассматриваться подробности структурированной обработки исключений, а пока полезно отметить, что при явном приведении можно перехватывать возможные ошибки с применением ключевых слов try и catch:

    // Перехват возможной ошибки приведения.

    object frank = new Manager();

    Hexagon hex;

    try

    {

      hex = (Hexagon)frank;

    }

    catch (InvalidCastException ex)

    {

      Console.WriteLine(ex.Message);

    }

    Очевидно, что показанный пример надуман; в такой ситуации вас никогда не будет беспокоить приведение между указанными типами. Однако предположим, что есть массив элементов System.Object, среди которых лишь малая толика содержит объекты, совместимые с Employee. В этом случае первым делом желательно определить, совместим ли элемент массива с типом Employee, и если да, то лишь тогда выполнить приведение.

    Для быстрого определения совместимости одного типа с другим во время выполнения в C# предусмотрено ключевое слово as. С помощью ключевого слова as можно определить совместимость, проверив возвращаемое значение на предмет null. Взгляните на следующий код:

    // Использование ключевого слова as для проверки совместимости.

    object[] things = new object[4];

    things[0] = new Hexagon();

    things[1] = false;

    things[2] = new Manager();

    things[3] = "Last thing";

    foreach (object item in things)

    {

      Hexagon h = item as Hexagon;

      if (h == null)

      {

        Console.WriteLine("Item is not a hexagon"); // item - не Hexagon

      }

      else

      {

        h.Draw();

      }

    }

    Здесь производится проход в цикле по всем элементам в массиве объектов и проверка каждого из них на совместимость с классом Hexagon. Метод Draw() вызывается, если (и только если) обнаруживается объект, совместимый с Hexagon. В противном случае выводится сообщение о том, что элемент несовместим.

    Использование ключевого слова is (обновление в версиях 7.0, 9.0)

    В дополнение к ключевому слову as язык C# предлагает ключевое слово is, предназначенное для определения совместимости типов двух элементов. Тем не менее, в отличие от ключевого слова as, если типы не совместимы, тогда ключевое слово is возвращает false, а не ссылку null. В текущий момент метод GivePromotion() спроектирован для приема любого возможного типа, производного от Employee. Взгляните на следующую его модификацию, в которой теперь осуществляется проверка, какой конкретно "тип сотрудника" был передан:

    static void GivePromotion(Employee emp)

    {

      Console.WriteLine("{0} was promoted!", emp.Name);

      if (emp is SalesPerson)

      {

        Console.WriteLine("{0} made {1} sale(s)!", emp.Name,

          ((SalesPerson)emp).SalesNumber);

        Console.WriteLine();

      }

      else if (emp is Manager)

      {

        Console.WriteLine("{0} had {1} stock options...", emp.Name,

          ((Manager)emp).StockOptions);

        Console.WriteLine();

      }

    }

    Здесь во время выполнения производится проверка с целью выяснения, на что именно в памяти указывает входная ссылка типа базового класса. После определения, принят ли объект типа SalesPerson или Manager, можно применить явное приведение, чтобы получить доступ к специализированным членам данного типа. Также обратите внимание, что помещать операции приведения внутрь конструкции try/catch не обязательно, т.к. внутри раздела if, выполнившего проверку условия, уже известно, что приведение безопасно.

    Начиная с версии C# 7.0, с помощью ключевого слова is переменной можно также присваивать объект преобразованного типа, если приведение работает. Это позволяет сделать предыдущий метод более ясным, устраняя проблему "двойного приведения". В предшествующем примере первое приведение выполняется, когда производится проверка совпадения типов, и если она проходит успешно, то переменную придется приводить снова. Взгляните на следующее обновление предыдущего метода:

    static void GivePromotion(Employee emp)

    {

      Console.WriteLine("{0} was promoted!", emp.Name);

      // Если SalesPerson, тогда присвоить переменной s

      if (emp is SalesPerson s)

      {

        Console.WriteLine("{0} made {1} sale(s)!", s.Name,

          s.SalesNumber);

        Console.WriteLine();

      }

      // Если Manager, тогда присвоить переменной m

      else if (emp is Manager m)

      {

        Console.WriteLine("{0} had {1} stock options...",

          m.Name, m.StockOptions);

        Console.WriteLine();

      }

    }

    В версии C# 9.0 появились дополнительные возможности сопоставления с образцом (они были раскрыты в главе 3). Такое обновленное сопоставление с образцом можно использовать с ключевым словом is. Например, для проверки, что объект сотрудника не относится ни к классу Manager, ни к классу SalesPerson, применяйте следующий код:

    if (emp is not Manager and not SalesPerson)

    1 ... 91 92 93 94 95 96 97 98 99 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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