首页 新闻 会员 周边 捐助

如何用反射来创建泛型实例

0
[已解决问题] 解决于 2012-12-12 18:05

比如有一个根据Class创建实例的方法

IJobDetail job = JobBuilder.Create<DemoJob1>();

如果DemoJob1是在一个dll文件中,而且类名不确定(有可能是DemoJob2等)那么改如何写呢?

我的目的是要实现:

根据不同的 dll 来创建不同的实例。当然这些class都同样的接口约束。

 

改如何写呢?

Gamain的主页 Gamain | 菜鸟二级 | 园豆:357
提问于:2012-11-28 13:27
< >
分享
最佳答案
0

又 何必 纠结右边呢,既能都有公共的接口,直接转换成接口就行了

 Assembly assembly = ...
Type type = assembly.GetType("classname");
IJobDetail job = (IJobDetail)Activator.CreateInstance(type);
           
奖励园豆:5
Qlin | 老鸟四级 |园豆:2403 | 2012-11-28 13:32

这个不太对吧

Activator.CreateInstance(type) 的返回值是一个object类型
如果不调用JobBuilderCreate方法 怎么能把这个object类型的对象强制转换成IJobDetail类型呢?
如下截图:
Gamain | 园豆:357 (菜鸟二级) | 2012-11-28 14:07

Gamain | 园豆:357 (菜鸟二级) | 2012-11-28 14:16

@Gamain: 

你创建的 类型不是继承自IJobDetail 吗,虽说是object,但是里面就是你具体的类型,当然可以这样转。

Qlin | 园豆:2403 (老鸟四级) | 2012-11-28 14:18

@Qlin: 

哦,基类,应该是隐式的

Qlin | 园豆:2403 (老鸟四级) | 2012-11-28 14:26

@Qlin: 

好了,看了Quartz的源码,问题解决了。谢谢你的帮助。

看来关于反射和泛型还要多多学习啊。

Gamain | 园豆:357 (菜鸟二级) | 2012-11-28 14:36

@Gamain: 怎么个代码呢?贴一段?

nickycookie | 园豆:106 (初学一级) | 2012-11-29 14:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册