Язык программирования C#9 и платформа .NET5 - Джепикс Филипп - Страница 341
- Предыдущая
- 341/642
- Следующая
Чтобы проиллюстрировать использование, создайте новый проект консольного приложения C# по имени
LateBindingWithDynamicMathLibraryClass1.csMathLibrarySimplaMath.csnamespace MathLibrary{ public class SimpleMath { public int Add(int x, int y) { return x + y; } }}Модифицируйте содержимое файла
MathLibrary.csprojLateBindingWithDynamic<Target Name="PostBuild" AfterTargets="PostBuildEvent"> <Exec Command= "copy $(TargetPath) $(SolutionDir)LateBindingWithDynamic\$(OutDir) $(TargetFileName) /Y 
copy $(TargetPath) $(SolutionDir)LateBindingWithDynamic\ $(TargetFileName) /Y" /></Target>На заметку! Если вы не знакомы с событиями при компиляции, тогда ищите подробные сведения в главе 17.
Теперь возвратитесь к проекту
LateBindingWithDynamicSystem.ReflectionMicrosoft.CSharp.RuntimeBinderProgram.csProgramAdd()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); }}Ниже показано, как можно упростить предыдущую логику, используя ключевое слово
dynamicprivate 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 (Установить).
- Предыдущая
- 341/642
- Следующая
