反射最初是用在序列化和反序列化的,因为要动态的确定对象的类型,所以用多的化,会影响到程序的性能。
比如在一个aspx文件里声明了一个控件
<asp:Label ID="Label1" runat="server" Text="工作天数:">
这里就用到了反射,在编译成一个页面类的时候,由Reflector动态的确定Label类,是否包含Text属性,然后赋值。所以有时候是不推荐使用服务器控件的,原因也在此。最后要说的是,楼主这种求知的态度固然可贵,可是你这种态度的确需要再斟酌一下,让人有种等着你来施舍分似的...
比如在一个aspx文件里声明了一个控件
<asp:Label ID="Label1" runat="server" Text="工作天数:">
这里就用到了反射,在编译成一个页面类的时候,由Reflector动态的确定Label类,是否包含Text属性,然后赋值。所以有时候是不推荐使用服务器控件的,原因也在此。最后要说的是,楼主这种求知的态度固然可贵,可是你这种态度的确需要再斟酌一下,让人有种等着你来施舍分似的...
特性是一般用来表示类的性质,比如是否可以序列化,使用什么设计器设计等什么是滥用反射:
了有点“Call by Name”的味道,就是通过类的名称或成员的名称来调用。反射+特性,有什么实际用处:
只有在某些条件下使用,并不是使用了就好,也不会因为使用了就不好。按实际情况决定。
=================
我给你一篇翻译文章,写的还行。
http://www.cnblogs.com/WuCountry/archive/2007/04/02/697391.html
在编译成一个页面类的时候,由Reflector动态的确定Label类,是否包含Text属性,然后赋值。所以有时候是不推荐使用服务器控件的,原因也在此。===============这里关反射的事吗??从来没有听说过。
在编译成一个页面类的时候,由Reflector动态的确定Label类,是否包含Text属性,然后赋值。所以有时候是不推荐使用服务器控件的,原因也在此。===============这里关反射的事吗??从来没有听说过。===================we have a "Text" attribute, and it's value is "工作天数:". Using reflection, ASP.NET is able to detect whether the control has property by that name, and if so, sets its value to the declared value. 最初的进程间的方法调用就是这么实现的,通过socket传输过去一个方法名,然后通过反射识别出这个方法名来,并调用它,传回值。后来就演变成了reflection。
其实你仔细想想,一个string格式的类名或者函数名,查找这个类和方法在内存种存在的位置,还是要比对类的元数据的,然后获取这个类和方法在内存中的地址,这么操作的话,显然会有效率上的问题,比起直接得到方法的入口,要多很多工序,这也就是为什么不要滥用reflection的原因。
偶真的想到用何种方式给 LZ 描述清楚,我只能说, 特性(Attribute)更多用在诸如自动化工具,继承开发环境(IDE)当中,而具体的实践项目中,比较少用,至于,反射,大多数高级(记住是高级)开发人员,最忌讳的是性能,
我敢肯定,假如 LZ 在 baidu/googel 输入 .net 特性 或者 反射 性能
比这里的答案更加丰富多彩