• Авторизация


Loading run-time-known types 13-04-2006 22:04 к комментариям - к полной версии - понравилось!


Наиболее простой способ создать объект, который становится известным только на эпапе выполнения, это Type.GetType(). К сожалению, этот путь и самый неэффективный : Type.GetType() не только пытается загрузить указанный assembly, но запрашивает полный достун к его metadata для того, чтобы возвращаемый результат был, как и специфицировано, типа System.Type.
С другой стороны, Activator.CreateInstance() возвращает object handler без попытки доступа к metadata. Этот путь в несколько раз быстрее, но и, как следовало ожидать, нельзя пожертвовать metadata без каких-либо потерь : возврашаемый Activator.CreateInstance() ObjectHandle можно использовать разве что для немедленной передачи в другой domain, и, видимо, в этом и состоит предназначение этото метода, потому что никакой функциональной нагрузки этот ObjectHandle без соответствующей metadata не несет. Или сразу же после передачи в другой domain, или в непосредственно в вызывающем, первое, что делают с таким ObjectHandle - вызывают его Unwrap(), кот. собственно и загружает недостающую metadata для объекта.
Отметим, что без Unwrap() никакие операции с возвращенным объектом не имеют смысла : так, например, даже если он является реализацией интерфейса, то поскольку это становится известным CLR только с помощью metadata, cast на родительский интерфейс без Unwrap() не будет успешным.
вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Loading run-time-known types | Oleg_Kleiman - Soft kibitzing | Лента друзей Oleg_Kleiman / Полная версия Добавить в друзья Страницы: раньше»