当前位置:编程学习 > C#/ASP.NET >>

请教.NET 反射机制的应用场景

最近再学习反射,提到:
.Net反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,
都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为.Net的反射机制。
.Net反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;

了解到  程序的插件可以用到反射,还有啥其他场合?配置等方面也可以吧?能否具体举例? --------------------编程问答-------------------- 最简单的,遍历结构体、遍历类就要用到反射。 --------------------编程问答-------------------- 比如说PropertyGrid,也就是当你选中控件,在VS右下角出现的那个设置控件属性的表格,如果没有办法遍历一个类的属性,VS怎么能列出那些呢,特别地,你新建一个自己的控件,它的属性VS也知道。
另外VS的编辑器,当你输入对象名,它自动提示有什么方法、属性的列表,这个也需要反射。

总之VS本身就大量用了反射。 --------------------编程问答-------------------- 学习。来了。。 --------------------编程问答-------------------- 表示我现在用的Socket框架 就是依托反射实现的 --------------------编程问答-------------------- 比如你要做一个框架,具体的模块交给很多人来实现,你不可能一一引用他们。 --------------------编程问答-------------------- 比如抽象工厂模式,就用到了反射,可以变换数据库,只需要改一个字段即可 --------------------编程问答-------------------- VS IDE为啥知道你String.后面那一大堆滴方法的呢,当然是查出来滴,怎么查自然是反射

当然其实你要真的知道这玩意的用法,请google反射这词的前身"RTTI(Run-Time Type Information,通过运行时类型信息)"

从这个词你就比反射这词更直白点吧,在运行期查询类型信息就是反射的最基本的作用 --------------------编程问答--------------------
引用 7 楼 wanghui0380 的回复:
VS IDE为啥知道你String.后面那一大堆滴方法的呢,当然是查出来滴,怎么查自然是反射

当然其实你要真的知道这玩意的用法,请google反射这词的前身"RTTI(Run-Time Type Information,通过运行时类型信息)"

从这个词你就比反射这词更直白点吧,在运行期查询类型信息就是反射的最基本的作用


RTTI的I应该是IDentify吧。运行期类型识别。另外还有Dynamic Creation,合起来就是反射。 --------------------编程问答-------------------- 其实反射还有一些偏僻的用法,比如运行时获得要运行的代码的IL字节码,配合Emit可以实现IL层面的元编程。 --------------------编程问答-------------------- 来点简单的,比如遍历某些资源文件的时候,有一些名字有规律的
Resource.A1
Resource.A2
Resource.A3
...
你只知道属性名而不能通过for循环来遍历,这时候就可以利用反射来获取对象属性,
类似下面
for(int i = 0; i < n; i++)
{
    Resource.GetByName("A" + i);
}

--------------------编程问答-------------------- 如果你写过10万行代码,那么你写出2、3段分别不足10行的反射代码并且用在你的产品中,会发挥很好的效果并且提升代码的动态性。

没有坚实的基础,那么你只能学知识,而不要玩火。 --------------------编程问答--------------------
引用 10 楼 wg5945 的回复:
来点简单的,比如遍历某些资源文件的时候,有一些名字有规律的
Resource.A1
Resource.A2
Resource.A3
...
你只知道属性名而不能通过for循环来遍历,这时候就可以利用反射来获取对象属性,
类似下面
for(int i = 0; i < n; i++)
{
    Resource.GetByName("A" + i);
}


晕死!这不叫反射。

比如你搜索一个控件内部的所有子控件,这叫做反射?你完全误解了“反射”概念。 --------------------编程问答-------------------- 我们看《深入浅出MFC》,其中讲解MFC的七大机制之一就是在框架层面去支持RTTI和DC。如果你看过那本书,那么你就会对Runtime层面支持反射API的必要性和对编程的简化有着最直观的体会。 --------------------编程问答--------------------
引用 12 楼 sp1234 的回复:
Quote: 引用 10 楼 wg5945 的回复:

来点简单的,比如遍历某些资源文件的时候,有一些名字有规律的
Resource.A1
Resource.A2
Resource.A3
...
你只知道属性名而不能通过for循环来遍历,这时候就可以利用反射来获取对象属性,
类似下面
for(int i = 0; i < n; i++)
{
    Resource.GetByName("A" + i);
}


晕死!这不叫反射。

比如你搜索一个控件内部的所有子控件,这叫做反射?你完全误解了“反射”概念。


好吧,我没说这个叫“反射”,我只是说利用“反射”
public static string GetByName(this Resource res, string str)
{
    if (string.IsNullOrEmpty(str)) return null;
    PropertyInfo pi = res.GetType().GetProperty(str);
    if (pi != null) return pi.GetValue(res, null).ToString();
    return null;
}

补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,