Architecture Net



         

Динамическое связывание - часть 2


Type *t = a->GetType("01.NetCpp.Acme.Customers"); // Клиенты
Object *customerlnstance = // Объект
Activator::Createlnstance(t); // Активатор

Затем, чтобы вызвать метод GetCustomer, формируем список параметров и используем метод Invoke (Вызвать) экземпляра Methodlnfо.
Dynamic\Customer\Debug в папку DynamicXDebug перед выполнение Dynamic . ехе.

// вызвать метод
Object *arguments [] = new Object*[1]; // новый Объект
int customerld = -1;
arguments[0] = _box(customerld); // параметры
Object *returnType = mi->Invoke( // Вызвать
customerlnstance, arguments); // параметры

Используя методы отражения, мы получаем информацию о типе для каждого поля в возвращаемой структуре. Обратите внимание, что метод GetValue, принадлежащий Fieldlnf о, возвращает данные для конкретного поля в объекте.

if (returnType->GetType() ==
Type::GetType("System.Collections.ArrayList"))
// ("Система.Коллекции.Список массивов")
{
ArrayList *arrayList =
dynamic_cast<ArrayList *>(returnType);
for (int i = 0; i<arrayList->Count; i++) // Счет
{
Type *itemType =
arrayList->get_Item(i)->GetType();
Fieldlnfo *fi [] = itemType->GetFields();
for (int j = 0; j < fi->Length; j++)
{
Object *fieldValue = // Объект
fi[j]->GetValue(arrayList->get_Item(i));
Console::Write( // Запись
"{0, -10} = {1, -15}",
fi[j]->Name, fieldValue); // Имя
}
Console::WriteLine();
}
}

Снова обращаем внимание на то, что в строке System.Collections.ArrayList (Система.Коллекции.Список массивов) для отделения имен использованы точки, а не "двойные двоеточия.

В этом коде не использованы никакие определенные объекты или типы из сборки Customer (Клиент). С целью проиллюстрировать главные принципы, мы применили некоторые знания о сборке, чтобы код был простым. Однако должно быть понятно, как сделать его полностью общим.

Можно сделать шаг вперед и использовать классы, которые генерируют метаданные (в System: :Reflection: :Emit (Система-Отражение-Генерация)). Можно даже динамически создавать сборку в памяти, а затем загружать и выполнять ее!

CompEbook.ru Железо, дизайн, обучение и другие




Содержание  Назад  Вперед