我用反思做了很多有趣的事情。现在我想知道,是否可以使用反射向自动属性(propName { get; set; }
)添加代码?
我的意思是我可以获得PropertyInfo
并更改getter或setter的代码吗?
有可能吗?我该怎么做?或者我对谷歌的关键词是什么(我问的是因为我发现的一切都是关于如何通过反射来获取或设置属性而不是改变getter和setter)。
答案 0 :(得分:0)
在运行时,你可以通过创建从类继承的代理类型并使用拦截来为虚拟属性执行此操作。最好和最快的方法之一是Castle.DynamicProxy(Good tutorial)或使用Reflection Emit IL Manipulating(example + FluentIL非常有趣)。
在编译时,您可以在PostSharp(商业化,使用Profiler API)或Fody(免费,在幕后使用真棒Mono.Cecil的帮助下使用静态IL编织来完成此操作,例如{{3 }})。我认为Telerik ORM Tools使用Profiler API来创建具有有用/支持功能的动态代理对象,例如。