请教C#中的反射

bxhxb 2012-07-19 02:25:39
从C++转C#两个月,还是不太了解反射。看书,里面说的主要是Type拿到后能取各种属性,但是不太明白这种属性有什么作用。纯判断类型的话,is就可以。as可以映射类型。实在还是没有弄明白反射的作用。
搜论坛上的帖子,很多是说Java的。因此发帖请教几个问题。

1、反射的定义。msdn上说反射提供了一种对象。 哪位有没有更具体的解释呢。(Reflection provides objects (of type Type) that encapsulate assemblies, modules and types.)
2、反射的使用范围,哪些场景会使用反射,甚至哪些场景必须使用反射。因为我现在看到的就是Type,好像没有太广的使用范围。
3、反射的优缺点。

谢谢。
...全文
308 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cheng2005 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

架构师要用到反射,因为他们需要调用一些下面程序员还没有处出来的类的功能.不用反射你咋搞?...当然,你可以都把接口写出来也行,但是毕竟还是反射灵活些....
[/Quote]
如果哪个架构师在可以选择不用反射的地方使用了反射,那他就是一个正宗的伪架构师。
effun 2012-07-19
  • 打赏
  • 举报
回复
举个简单的例子,有一个int变量i,有系列的方法Method1、Method2,当i==1时候调Method1,i==2的时候调Method2,一般情况可以用switch来解决这个问题,但有没有想过把字符串"Method"和i拼接起来直接调用而省掉swtich呢?那就用反射吧。

int i = 1;
string methodName = "Method" + i;
this.GetType().GetMethod(methodName).Invoke(this, null);

以上代码仅供参考
bxhxb 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

架构师要用到反射,因为他们需要调用一些下面程序员还没有处出来的类的功能.不用反射你咋搞?...当然,你可以都把接口写出来也行,但是毕竟还是反射灵活些....
[/Quote]

这个确实是一个很有用途的地方。谢谢。
bxhxb 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

从C++过来的你不懂反射么?
[/Quote]

MFC应该有反射,但没有用过MFC。标准C++没有反射的。
bxhxb 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

http://www.cnblogs.com/zhusl118/archive/2008/11/21/1338373.html
[/Quote]

看了这个文章,这个相对易懂念。谢谢。
yuandonghuia 2012-07-19
  • 打赏
  • 举报
回复
架构师要用到反射,因为他们需要调用一些下面程序员还没有处出来的类的功能.不用反射你咋搞?...当然,你可以都把接口写出来也行,但是毕竟还是反射灵活些....
tkscascor 2012-07-19
  • 打赏
  • 举报
回复
从C++过来的你不懂反射么?
cheng2005 2012-07-19
  • 打赏
  • 举报
回复
能不用反射就别用反射,如果你的结构定义的足够好,那么根本就不需要反射。
StarlightHan 2012-07-19
  • 打赏
  • 举报
回复
反射实际上就是得到程序集中的属性和方法.
实现步骤:
1,导入using System.Reflection;
2,Assembly.Load("程序集")加载程序集,返回类型是一个Assembly
3, foreach (Type type in assembly.GetTypes())
{
string t = type.Name;
}
得到程序集中所有类的名称
4,Type type = assembly.GetType("程序集.类名");获取当前类的类型
5,Activator.CreateInstance(type); 创建此类型实例
6,MethodInfo mInfo = type.GetMethod("方法名");获取当前方法
7,mInfo.Invoke(null,方法参数);
popo0762 2012-07-19
  • 打赏
  • 举报
回复
http://www.cnblogs.com/zhusl118/archive/2008/11/21/1338373.html

110,535

社区成员

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

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

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