【发布时间】:2009-11-26 15:31:53
【问题描述】:
有人告诉我使用 Reflection.Emit 而不是 PropertyInfo.GetValue / SetValue,因为这样更快。 但我真的不知道 Reflection.Emit 中的哪些内容以及如何使用它来替代 GetValue 和 SetValue。有人可以帮我吗?
【问题讨论】:
-
嗯? Reflection.Emit 允许您动态创建代码以供以后执行。但它也更复杂,更容易出错,更不用说难以调试了。您需要描述您正在尝试使用 GetValue/SetValue 做什么,以及对性能的要求。你为什么首先使用反射?
-
我猜他有一些动态加载的对象并想要访问该属性,问题是是否调用GetValue/SetValue或生成IL代码来访问“硬编码”属性 会更好。我建议尝试使用 Reflection.Emit.DynamicMethod,然后检查哪个更快。对我来说,GetValue/SetValue 就足够了,我只需要生成 IL 代码来处理在编译时签名未知的事件 :)
-
我使用反射来获取和设置对象属性的值(我不知道对象的类型)
-
(重新接受答案:请注意,如果您在每次下载时使用 HyperDescriptor,这只会比反射快;它不在 BCL 中)
标签: c# reflection reflection.emit