books-read.com
books-read.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

Наш ресурс дает возможность бесплатно читать книгу онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных . Сайт books-read.com дает возможность читать полную версию книги без регистрации и sms. Все книги онлайн, не надо качать fb2, epub, txt.
Добавить книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю в приложение ЧИТАТЬ КНИГУ ОФЛАЙН в приложении ios/android
Перейти на страницу:

Чтобы проиллюстрировать использование, создайте новый проект консольного приложения C# по имени

LateBindingWithDynamic
. Добавьте к решению проект библиотеки классов под названием
MathLibrary
. Переименуйте первоначальный файл
Class1.cs
в проекте
MathLibrary
на
SimplaMath.cs
и реализуйте класс, как показано ниже:

namespace MathLibrary

{

  public class SimpleMath

  {

    public int Add(int x, int y)

    {

      return x + y;

    }

  }

}

Модифицируйте содержимое файла

MathLibrary.csproj
следующим образом (чтобы скомпилированная сборка копировалась в целевой каталог
LateBindingWithDynamic
):

<Target Name="PostBuild" AfterTargets="PostBuildEvent">

    <Exec Command=

    "copy $(TargetPath) $(SolutionDir)LateBindingWithDynamic$(OutDir)

     $(TargetFileName) /Y 
copy $(TargetPath)

     $(SolutionDir)LateBindingWithDynamic

     $(TargetFileName) /Y" />

</Target>

На заметку! Если вы не знакомы с событиями при компиляции, тогда ищите подробные сведения в главе 17.

Теперь возвратитесь к проекту

LateBindingWithDynamic
и импортируйте пространства имен
System.Reflection
и
Microsoft.CSharp.RuntimeBinder
в файл
Program.cs
. Добавьте в класс
Program
следующий метод, который вызывает метод
Add()
с применением типичных обращений к API-интерфейсу рефлексии:

static void AddWithReflection()

{

  Assembly asm = Assembly.LoadFrom("MathLibrary");

  try

  {

<b>    // Получить метаданные для типа SimpleMath.</b>

    Type math = asm.GetType(&quot;MathLibrary.SimpleMath&quot;);

<b>    // Создать объект SimpleMath на лету.</b>

    object obj = Activator.CreateInstance(math);

<b>    // Получить информацию о методе Add().</b>

    MethodInfo mi = math.GetMethod(&quot;Add&quot;);

<b>    // Вызвать метод (с параметрами).</b>

    object[] args = { 10, 70 };

    Console.WriteLine(&quot;Result is: {0}&quot;, mi.Invoke(obj, args));

  }

  catch (Exception ex)

  {

    Console.WriteLine(ex.Message);

  }

}

Ниже показано, как можно упростить предыдущую логику, используя ключевое слово

dynamic
:

private static void AddWithDynamic()

{

  Assembly asm = Assembly.LoadFrom(&quot;MathLibrary&quot;);

  try

  {

<b>    // Получить метаданные для типа SimpleMath.</b>

    Type math = asm.GetType(&quot;MathLibrary.SimpleMath&quot;);

<b>    // Создать объект SimpleMath на лету.</b>

    dynamic obj = Activator.CreateInstance(math);

<b>    // Обратите внимание, насколько легко теперь вызывать метод Add().</b>

    Console.WriteLine(&quot;Result is: {0}&quot;, obj.Add(10, 70));

  }

  catch (RuntimeBinderException ex)

  {

    Console.WriteLine(ex.Message);

  }

}

В результате вызова обоих методов получается идентичный вывод. Однако в случае применения ключевого слова dynamic сокращается объем кода. Благодаря динамически определяемым данным вам больше не придется вручную упаковывать аргументы внутрь массива экземпляров

object
, запрашивать метаданные сборки либо иметь дело с другими деталями подобного рода. При построении приложения, в котором интенсивно используется динамическая загрузка и позднее связывание, экономия на кодировании со временем становится еще более ощутимой.

Упрощение взаимодействия с СОМ посредством динамических данных (только Windows)

 Давайте рассмотрим еще один полезный сценарий для ключевого слова

dynamic
в рамках проекта взаимодействия с СОМ. Если у вас нет опыта разработки для СОМ, то имейте в виду, что скомпилированная библиотека СОМ содержит метаданные подобно библиотеке .NET Core, но ее формат совершенно другой. По указанной причине, когда программа .NET Core нуждается во взаимодействии с объектом СОМ, первым делом потребуется сгенерировать так называемую сборку взаимодействия (описанную ниже). Задача довольно проста.

На заметку! Если вы не устанавливали индивидуальный компонент Visual Studio Tools for Office (Инструменты Visual Studio для Office) или рабочую нагрузку Office/SharePoint development (Разработка для Office/SharePoint), то для проработки примеров в текущем разделе вам придется это сделать. Можете запустить программу установки и выбрать недостающий компонент или воспользоваться средством быстрого запуска Visual Studio (<Ctrl+Q>). Введите Visual Studio Tools for Office в поле быстрого запуска и выберите вариант Install (Установить).

Перейти на страницу:

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - на сайте онлайн книг books-read.com Вы можете читать полные версии книг автора в одном месте.


Язык программирования C#9 и платформа .NET5 отзывы

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


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

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

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


Прокомментировать
Подтвердите что вы не робот:*