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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 337 338 339 340 341 342 343 344 345 ... 642

Чтобы проиллюстрировать использование, создайте новый проект консольного приложения 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>

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

    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 (Установить).

1 ... 337 338 339 340 341 342 343 344 345 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

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