Язык программирования C#9 и платформа .NET5 - Джепикс Филипп - Страница 326
- Предыдущая
- 326/642
- Следующая
Изменить размер шрифта:
326
Создайте новый проект консольного приложения по имени
LateBindingAppusingSystem.IOSystem.ReflectionProgram.csusing System;using System.IO;using System.Reflection;// Это приложение будет загружать внешнюю сборку и// создавать объект, используя позднее связывание.Console.WriteLine("***** Fun with Late Binding *****");<b>// Попробовать загрузить локальную копию CarLibrary.</b>Assembly a = null;try{ a = Assembly.LoadFrom("CarLibrary");}catch(FileNotFoundException ex){ Console.WriteLine(ex.Message); return;}if(a != null){ CreateUsingLateBinding(a);}Console.ReadLine();static void CreateUsingLateBinding(Assembly asm){ try {<b> // Получить метаданные для типа MiniVan.</b> Type miniVan = asm.GetType("CarLibrary.MiniVan");<b> // Создать экземпляр MiniVan на лету.</b> object obj = Activator.CreateInstance(miniVan); Console.WriteLine("Created a {0} using late binding!", obj); } catch(Exception ex) { Console.WriteLine(ex.Message); }}Перед запуском нового приложения понадобится вручную скопировать файл
CarLibrary.dllbin\Debug\net5.0На заметку! Не добавляйте ссылку на
CarLibrary.dllОбратите внимание, что метод
Activator.Createlnstance()System.ObjectMiniVanobjMiniVan// Привести к типу MiniVan, чтобы получить доступ к его членам?// Нет! Компилятор сообщит об ошибке!object obj = (MiniVan)Activator.CreateInstance(minivan);Однако из-за того, что в приложение не была добавлена ссылка на сборку
CarLibrary.dllusingCarLibraryMiniVanMiniVanSystem.ObjectВызов методов без параметров
Предположим, что требуется вызвать метод
TurboBoost()MiniVanMethodInfTurboBoost()Туре.GetMethod()MethodInfоMiniVan.TurboBoost()Invoke()MethodInfо.Invoke()MethodInfоSystem.ObjectПоскольку метод
TurboBoost()nullCreateUsingLateBinding()static void CreateUsingLateBinding(Assembly asm){ try { // Получить метаданные для типа Minivan. Type miniVan = asm.GetType("CarLibrary.MiniVan"); // Создать объект MiniVan на лету. object obj = Activator.CreateInstance(miniVan); Console.WriteLine($"Created a {obj} using late binding!"); // Получить информацию о TurboBoost.
326
- Предыдущая
- 326/642
- Следующая
Перейти на страницу:
