Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Создайте новый проект консольного приложения по имени
LateBindingApp
using
System.IO
System.Reflection
Program.cs
using 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.dll
binDebugnet5.0
На заметку! Не добавляйте ссылку на
CarLibrary.dll
Обратите внимание, что метод
Activator.Createlnstance()
System.Object
MiniVan
obj
MiniVan
// Привести к типу MiniVan, чтобы получить доступ к его членам?
// Нет! Компилятор сообщит об ошибке!
object obj = (MiniVan)Activator.CreateInstance(minivan);
Однако из-за того, что в приложение не была добавлена ссылка на сборку
CarLibrary.dll
using
CarLibrary
MiniVan
MiniVan
System.Object
Вызов методов без параметров
Предположим, что требуется вызвать метод
TurboBoost()
MiniVan
MethodInf
TurboBoost()
Туре.GetMethod()
MethodInfо
MiniVan.TurboBoost()
Invoke()
MethodInfо.Invoke()
MethodInfо
System.Object
Поскольку метод
TurboBoost()
null
CreateUsingLateBinding()
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.