通过反射在运行时实例化一个类

时间:2011-03-17 14:20:51

标签: c# reflection

您好我正在尝试在运行时发现并实例化一个类。装配体加载到工厂对象中。

到目前为止一切正常

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

但我无法使用obj获取属性名称Obj.FirstNameobj.LastName不可用,因此我尝试将其类型化为正确的基础类。

但是下面给出的代码不起作用。

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

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

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);

答案 1 :(得分:1)

您无法强制转换,您没有在项目中添加程序集作为参考。您需要使用Reflection来获取对象属性。使用Type.GetProperty和PropertyInfo.GetValue。请注意C#版本4 动态关键字如何能够大大减轻语法上的痛苦,建议使用。

答案 2 :(得分:0)

您需要在实例化之后强制转换对象。