Сначала выводится имя, поток и контекст прикладной области, заданной по умолчанию
AppDomain *currentDomain = AppDomain:: CurrentDomam;
Console::WriteLine(
"At startup, Default AppDomain is {0}
Threadld: {1}
"При запуске по умолчанию AppDomain - {0}
Threadld: {1}
Contextld {2}\n",
currentDomain->FrlendlyName,
Thread::CurrentThread->GetHashCode() .ToString(),
Thread::CurrentContext->ContextID.ToString());
Затем загружается и выполняется сборка Код из этой сборки только выводит строку, название прикладной области, в которую загружена сборка, а также название потока и контекста Необходимо отметить, что все это выполняется в прикладной области, создаваемой по умолчанию
int val = domain->ExecuteAssembly(
"TestApp\\bin\\Debug\\TestApp.exe", 0, args);
// параметры
Потом мы создадим экземпляр Customers (Клиенты) из сборки Customer (Клиент) в прикладной области, заданной по умолчанию Метод Createlnstance класса AppDomain (Прикладная область) возвращает экземпляр ObjectHandle Этот ObjectHandle можно передавать между прикладными областями без загрузки метаданных, ассоциированных с упакованным типом Если нужно использовать созданный экземпляр объекта, его следует распаковать, вызвав метод Unwrap (Развернуть) для объекта Ob] ectHandle
Objecthandle *on = currentDomain->Create!nstance(
"Customer", "01.NetCpp.Acme.Customers"), // Клиент
Customers *custs = // Клиенты
dynamic_cast<Customers *>(oh->Unwrap ());
Затем мы добавляем нового клиента, а потом перечисляем всех существующих клиентов Необходимо отметить, что и конструктор этого типа, и его методы выполняются в том же самом потоке и контексте, что и созданная по умолчанию прикладная область
Далее мы создаем новую прикладную область, а в ней — экземпляр того же типа, что и раньше
AppDomain *domain = AppDomain::CreateDomain(
"CreatedDomainl", 0, 0);
oh = domain->CreateInstance(
"Customer", "01.NetCpp Acme.Customers"); // Клиент
Customers *custs2 = dynamic_cast // Клиенты
<Customers *>(oh->Unwrap());
AppDomainTest
AppDomain *domain = AppDomain::CreateDomain( "CreatedDomain2", 0, 0);
String * args[] = new String *[!];
// Строка * параметры [] = новая Строка * [1];
args[0] = "MakeReservation"; // параметры [О]
int val = domain->ExecuteAssembly(
"TestApp\\bin\\Debug\\TestApp.exe", 0, args); // параметры
AppDomain::Unload(domain);
Подпрограмма Main (Главная) загружает сборку Hotel (Гостиница) в созданную прикладную область. В этом примере приложение TestApp. exe реализовано на С#. После загрузки оно запрашивает метаданные сборки для получения информации о типе HotelBroker. Затем эта информация используется для создания объекта HotelBroker. Класс HotelBroker помечен атрибутом синхронизации. В результате конструктор HotelBroker и метод MakeReservation работают в контексте, отличном от заданного по умолчанию.
Assembly a = AppDomain.CurrentDomain.Load("Hotel") ;
// Сборка - Загрузить ("Гостиница"); Type typeHotelBroker =
а.GetType("01.NetCpp.Acme.HotelBroker"); HotelBroker hotelBroker =
(HotelBroker)Act vator.CreateInstance(typeHotelBroker); DateTime date = Date
Time.Parse("12/2/2001"); // дата = DateTime.
Синтаксический анализ ("12/2/2001");
ReservationResult rr = hotelBroker.MakeReservation(1,
"Boston", "Sheraton", date, 3);
// "Бостон", "Шератон", дата, 3);
Console.WriteLine("\tReservation Id: {0}", // Идентификатор
rr.Reservationld);