EasyReflect ,用于简单的反射对象的属性,字段,方法的方式

jy02305022 2011-04-16 02:27:27
个人认为是一个非常有用的类库,请大家帮忙测试,完善.谢谢了!!!


/*
* 作者:冰麟轻武
* 说明:
* 1....使用简单
* 2....不区分静态和实例都可以反射
* 3....不区分public和private都可以反射,请小心使用
* 4....暂时不支持泛型方法,in和out参数的方法,有好的建议可以联系我
* 5....中文注释已经比较全面
*
* 有建议或者BUG可以联系:fttl_398@126.com,或者QQ 21979018,或者http://t.qq.com/jy02305022
* 所有提供建议或BUG者均加为好友,更新类库后第一时间发送给各位
* 版本 1.0.0.0 日期:2010-4-16
*/


源码下载地址:http://download.csdn.net/source/3195811
内附测试类
测试类运行界面




//简单演示

Test test = new Test();//测试类

//获取Test类实例test的字段int age的值
ReflectGet get = EasyReflect.GetFieldValue(typeof(Test), "age");
int i = get(test);

//设置属性Name的值为"哈哈哈"
ReflectSet set = EasyReflect.SetPropertyValue(typeof(Test), "Name");
set(test,"哈哈哈");

//运行方法void Say(String s);
ReflectCall call = call = EasyReflect.CallMethod(typeof(Test), "Say");
object o = call("大家好");
//此时o为null,当方法无返回值时,返回一个null
...全文
356 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
水碎了 2012-04-05
  • 打赏
  • 举报
回复
很牛X,好好学习下
wanghao2979 2011-05-09
  • 打赏
  • 举报
回复
连风 2011-05-09
  • 打赏
  • 举报
回复
留个记号,明天好好学习下!
「已注销」 2011-05-09
  • 打赏
  • 举报
回复
注释一直没改 应该是"调用5个10w次" 本来是10个100W次的,但是系统的实在太慢了....
「已注销」 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 aoqun 的回复:]

楼主我的测试没有成功.当用long型时,而且效率很低.比原来的效率
[/Quote]

用基本类型long确实要比引用类型string要来的慢一些,因为long是在栈中的,放到object里需要读取到内存里才能装箱,而string只需要把内存地址给object就可以实现装箱了,你对比一下

object o = 1000L;
object o2 = "ssss";

的效率就知道了


其次 需要知道这个类的工作原理
如果你是取到委托之后在运行,那么效率是绝对不会比系统的反射低的
如果是直接使用而不是取出委托,那么第一次的效率确实要比系统的满上一些,但不会很多
因为有个缓存池类似的东西存在,所以反复调用的时候除了第一次以外都比系统的效率要高

但是还有一个情况就是缓存满了的时候,缓存默认是25个,满了就会清除最远第一调用的数据
那么这个时候再调用就会被视为"第一次"(没缓存)了,缓存数可以在EasyReflect的静态构造函数中修改

一下是测试long的速度
当然这个是为了反射的,和直接赋值的速度是没法比的
还有什么问题可以用类中的联系方式我,因为我不定时上msdn可能会无法及时解答
  • 打赏
  • 举报
回复
楼主我的测试没有成功.当用long型时,而且效率很低.比原来的效率
「已注销」 2011-05-08
  • 打赏
  • 举报
回复
不好意思 很少上论坛 没有分了 这个也不是完全给人测试了,主要目地还是为了提供给大家用,能完善一下最好,不能也可以 只是想造福一下需要的人
「已注销」 2011-05-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 aoqun 的回复:]

楼主,你的东西开源吗?我可以用在我的商业项目中吗?(作为其中的一个工具类)
[/Quote]

可以,,没有问题,即使删除我的注释也可以...当然不删除是最好啦~~呵呵
使用中有什么问题也可以随时联系我


[Quote=引用 6 楼 xuzysun 的回复:]

让别人测试还设这么高的分!!
[/Quote]

不好意思 很少上论坛 没有分了 这个也不是给人测试了,只是提供给大家用,能完善最好,不能也不行 只是造福一下
xuzysun 2011-05-07
  • 打赏
  • 举报
回复
让别人测试还设这么高的分!!
  • 打赏
  • 举报
回复
楼主,你的东西开源吗?我可以用在我的商业项目中吗?(作为其中的一个工具类)
「已注销」 2011-04-16
  • 打赏
  • 举报
回复
部分源码可以看
http://topic.csdn.net/u/20110414/01/424a7506-4868-4147-bed2-3828cda5b76a.html?2136114265

有修改,最好还是可以直接下载,别忘了评论下哦!
sstyzh500 2011-04-16
  • 打赏
  • 举报
回复
和java到底有啥区别啊
我姓区不姓区 2011-04-16
  • 打赏
  • 举报
回复
直接将IL进行Emit吗?那的确是会比反射来的要快
moonwrite 2011-04-16
  • 打赏
  • 举报
回复
牛×
mark + up
Date 对象属性constructor 返回对创建此对象的 Date 函数的引用。prototype 使您有能力向对象添加属性方法。Date 对象方法getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。getFullYear() 从 Date 对象以四位数字返回年份。getHours() 返回 Date 对象的小时 (0 ~ 23)。getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。getMonth() 从 Date 对象返回月份 (0 ~ 11)。getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。getTime() 返回 1970 年 1 月 1 日至今的毫秒数。getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。getYear() 已废弃。 请使用 getFullYear() 方法代替。parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。setFullYear() 设置 Date 对象中的年份(四位数字)。setHours() 设置 Date 对象中的小时 (0 ~ 23)。setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。setMonth() 设置 Date 对象中月份 (0 ~ 11)。setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。setTime() setTime() 方法以毫秒设置 Date 对象。setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。setUTCSeconds() setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。setYear() 已废弃。请使用 setFullYear() 方法代替。toDateString() 把 Date 对象的日期部分转换为字符串。toGMTString() 已废弃。请使用 toUTCString() 方法代替。toISOString() 使用 ISO 标准返回字符串的日期格式。toJSON() 以 JSON 数据格式返回日期字符串。toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。toLocaleString() 据本地时间格式,把 Date 对象转换为字符串。toString() 把 Date 对象转换为字符串。toTimeString() 把 Date 对象的时间部分转换为字符串。toUTCString() 根据世界时,把 Date 对象转换为字符串。UTC() 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。valueOf() 返回 Date 对象的原始值。

110,546

社区成员

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

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

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