Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Чтобы проиллюстрировать использование, создайте новый проект консольного приложения 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()
static void AddWithReflection()
{
Assembly asm = Assembly.LoadFrom("MathLibrary");
try
{
<b> // Получить метаданные для типа SimpleMath.</b>
Type math = asm.GetType("MathLibrary.SimpleMath");
<b> // Создать объект SimpleMath на лету.</b>
object obj = Activator.CreateInstance(math);
<b> // Получить информацию о методе Add().</b>
MethodInfo mi = math.GetMethod("Add");
<b> // Вызвать метод (с параметрами).</b>
object[] args = { 10, 70 };
Console.WriteLine("Result is: {0}", mi.Invoke(obj, args));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Ниже показано, как можно упростить предыдущую логику, используя ключевое слово
dynamic
private static void AddWithDynamic()
{
Assembly asm = Assembly.LoadFrom("MathLibrary");
try
{
<b> // Получить метаданные для типа SimpleMath.</b>
Type math = asm.GetType("MathLibrary.SimpleMath");
<b> // Создать объект SimpleMath на лету.</b>
dynamic obj = Activator.CreateInstance(math);
<b> // Обратите внимание, насколько легко теперь вызывать метод Add().</b>
Console.WriteLine("Result is: {0}", obj.Add(10, 70));
}
catch (RuntimeBinderException ex)
{
Console.WriteLine(ex.Message);
}
}
В результате вызова обоих методов получается идентичный вывод. Однако в случае применения ключевого слова dynamic сокращается объем кода. Благодаря динамически определяемым данным вам больше не придется вручную упаковывать аргументы внутрь массива экземпляров
object
Упрощение взаимодействия с СОМ посредством динамических данных (только Windows)
Давайте рассмотрим еще один полезный сценарий для ключевого слова
dynamic
На заметку! Если вы не устанавливали индивидуальный компонент Visual Studio Tools for Office (Инструменты Visual Studio для Office) или рабочую нагрузку Office/SharePoint development (Разработка для Office/SharePoint), то для проработки примеров в текущем разделе вам придется это сделать. Можете запустить программу установки и выбрать недостающий компонент или воспользоваться средством быстрого запуска Visual Studio (<Ctrl+Q>). Введите Visual Studio Tools for Office в поле быстрого запуска и выберите вариант Install (Установить).