Создание класса во время выполнения посредством отражения - PullRequest
0 голосов
/ 17 марта 2011

Здравствуйте, я пытаюсь обнаружить и создать экземпляр класса во время выполнения. Сборка загружена в заводской объект.

До этого момента он работал нормально

Object obj = Activator.CreateInstance(
   (factory.ProxyAssembly.GetType("tempuri.org.Authorizations")));

, но я не могу получить имя свойства с obj, поскольку Obj.FirstName или obj.LastName недоступны, поэтому я пытаюсь типизировать его для соответствующего базового класса.

Но приведенный ниже код не работает.

 factory.ProxyAssembly.GetType("tempuri.org.Authorizations")
     .UnderlyingSystemType.BaseType a = 
         Activator.CreateInstance(factory.ProxyAssembly
              .GetType("tempuri.org.Authorizations").UnderlyingSystemType);

Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 17 марта 2011

Вы не можете выполнить приведение, у вас нет сборки, добавленной в качестве ссылки в вашем проекте. Вам нужно использовать Reflection, чтобы получить свойства объекта. Используйте Type.GetProperty и PropertyInfo.GetValue. Обратите внимание, что ключевое слово C # версии 4 dynamic может значительно уменьшить синтаксическую боль, рекомендуется.

1 голос
/ 17 марта 2011
tempuri.org.Authorizations a =  (tempuri.org.Authorizations)Activator.CreateInstance(factory.ProxyAssembly.GetType("tempuri.or g.Authorizations");

Посмотрите в кастинг с помощью ( Тип ). Где Тип - это тип класса, который возвращается. В этом случае type - это время компиляции. Reflection использует абстракции для экранирования конкретного типа, но в этом случае он вам понадобится. Если вы не используете do:

a.getClass().getField("FirstName").getString(a);
0 голосов
/ 17 марта 2011

Вам нужно разыграть объект после его создания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...