Console.ReadLine();
private static void DisplayInfo(Assembly a)
{
Console.WriteLine("***** Info about Assembly *****");
Console.WriteLine($"Asm Name: {a.GetName().Name}" ); // Имя сборки
Console.WriteLine($"Asm Version: {a.GetName().Version}"); // Версия сборки
Console.WriteLine($"Asm Culture:
{a.GetName().CultureInfo.DisplayName}"); // Культура сборки
Console.WriteLine("\nHere are the public enums:");
// Список открытых перечислений.
// Использовать запрос LINQ для нахождения открытых перечислений.
Type[] types = a.GetTypes();
var publicEnums =
from pe in types
where pe.IsEnum && pe.IsPublic
select pe;
foreach (var pe in publicEnums)
{
Console.WriteLine(pe);
}
}
К настоящему моменту вы должны уметь работать с некоторыми основными членами пространства имен System.Reflection
Понятие позднего связывания
На первый взгляд значимость позднего связывания оценить нелегко. Действительно, если есть возможность выполнить "раннее связывание" с объектом (например, добавить ссылку на сборку и выделить память под экземпляр типа с помощью ключевого слова new
Activator.Класс System.Activato
Класс System.Activator
Activator.Createlnstance(), который применяется для создания экземпляра типа через позднее связывание. Этот метод имеет несколько перегруженных версий, обеспечивая достаточно высокую гибкость. Самая простая версия метода CreateInstance() принимает действительный объект Туре, описывающий сущность, которую необходимо разместить в памяти на лету.Создайте новый проект консольного приложения по имени LateBindingApp
using импортируйте в него пространства имен System.IO и System.Reflection. Модифицируйте файл Program.cs, как показано ниже:using System;
using System.IO;
using System.Reflection;
// Это приложение будет загружать внешнюю сборку и
// создавать объект, используя позднее связывание.
Console.WriteLine("***** Fun with Late Binding *****");
// Попробовать загрузить локальную копию CarLibrary.
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
{
// Получить метаданные для типа MiniVan.
Type miniVan = asm.GetType("CarLibrary.MiniVan");