这2种方式的反射,有什么区别??

icyleaf1026 2008-09-26 07:02:42

第一种方式
Type t = Type.GetType(“类A”);
I_接口A i = t.GetInterface("I_I_接口A") as I_接口A;

第二种方式
return Assembly.Load(DALNameSpace).CreateInstance(“类A”) as I_接口A;



请问下,这2中反射的方式有什么不同??
性能,和反射的结果上面会有什么不同吗???
...全文
140 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
danjiewu 2008-09-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 icyleaf1026 的回复:]
引用 7 楼 loucc 的回复:
反谢接口意义不大吧,一般接口不参与业务逻辑(咱是这么干的)



但我只知道 类名称(有几个实现了该接口的类),怎么获取类的对象呢????
[/Quote]

这个用反射是正确的。
像Spring等IOC容器通过配置文件加载也是类似的方式。
icyleaf1026 2008-09-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 loucc 的回复:]
反谢接口意义不大吧,一般接口不参与业务逻辑(咱是这么干的)
[/Quote]


但我只知道 类名称(有几个实现了该接口的类),怎么获取类的对象呢????
icyleaf1026 2008-09-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 danjiewu 的回复:]
通过接口来返回反射得到的对象不是没有意义的,也是很常用的。
至于lz的问题,第一种写法本身是错误的,Type.GetInterface得到的是一个元数据(InterfaceInfo?),而不是对象本身。
[/Quote]

谢谢4楼···我测试果然是这样····要获取 接口对象是不是只有用第二种方法呢?
loucc 2008-09-27
  • 打赏
  • 举报
回复
反谢接口意义不大吧,一般接口不参与业务逻辑(咱是这么干的)
icyleaf1026 2008-09-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sp1234 的回复:]
我认为没有太技术化,不必过早地较真于哪一个方式 --> 我认为没有必要太技术化,不必过早地较真于哪一个方式

真正的反射,使用在要得到的东西根本不可能硬编码的情况下。例如进行反射的程序是先出现的产品,它要得到的类型是“未来”才产生的。这个不知道你是听得明白。
[/Quote]

在这里,我只能得知 “类A” 的类名字符串,不知道怎么通过 类名 来获取接口,只想到了反射,如果还有其他方法,请赐教···
slin60 2008-09-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sp1234 的回复:]
我认为没有太技术化,不必过早地较真于哪一个方式 --> 我认为没有必要太技术化,不必过早地较真于哪一个方式

真正的反射,使用在要得到的东西根本不可能硬编码的情况下。例如进行反射的程序是先出现的产品,它要得到的类型是“未来”才产生的。这个不知道你是听得明白。
[/Quote]


插件式编程往往就是预先知道接口,然后再反射的。所以说lz的做法不是完全没有用处
danjiewu 2008-09-26
  • 打赏
  • 举报
回复
通过接口来返回反射得到的对象不是没有意义的,也是很常用的。
至于lz的问题,第一种写法本身是错误的,Type.GetInterface得到的是一个元数据(InterfaceInfo?),而不是对象本身。
  • 打赏
  • 举报
回复
我认为没有太技术化,不必过早地较真于哪一个方式 --> 我认为没有必要太技术化,不必过早地较真于哪一个方式

真正的反射,使用在要得到的东西根本不可能硬编码的情况下。例如进行反射的程序是先出现的产品,它要得到的类型是“未来”才产生的。这个不知道你是听得明白。
  • 打赏
  • 举报
回复
[Quote=引用楼主 icyleaf1026 的帖子:]
C# code
第一种方式
Type t = Type.GetType(“类A”);
I_接口A i = t.GetInterface("I_I_接口A") as I_接口A;

第二种方式
return Assembly.Load(DALNameSpace).CreateInstance(“类A”) as I_接口A;





请问下,这2中反射的方式有什么不同??
性能,和反射的结果上面会有什么不同吗???
[/Quote]

关键是你这个实例没有用对地方。如果你预先可以硬编码“I_接口A”,就像第二个,你何必还要反射出“I_接口A”?第一个也是这个毛病,而且更严重。

你这两种反射都太没有反射的道理了。

一个东西有不同的得到的方式,我认为没有太技术化,不必过早地较真于哪一个方式。要先搞清楚为什么要用这个东西更重要。
icyleaf1026 2008-09-26
  • 打赏
  • 举报
回复
改正一下
I_I_接口A 改成 I_接口A

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧