在c#中用reflection或类似的(没有第三方库)替换Property Getter / Setter

例如,我有一个包含在类中的属性

public class Greeter { private Hashtable _data; public string HelloPhrase { get; set; } public Greeter(data) { _data = data; } } 

我想要做的是向HelloPhrase属性添加一个属性,就像这样

 [MyCustomAttribute("Hello_Phrase")] public string SayHello { get; set; } 

这样在构造函数中我可以反映已定义MyCustomAttribute的类(Greeter)中的Properties,并将属性的Get / Set方法设置为匿名方法/委托。

  public Greeter(data) { _data = data; ConfigureProperties(); } 

我已经设法从类中获取PropertyInfo,但这只暴露了GetSetMethod(http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.getsetmethod.aspx)和相应的GetGetMethod。

我已经在这里和网上阅读了一些问题,但找不到不使用某种Aspects库的答案。

任何人都可以提供指向在运行时设置Get / Set方法的指针吗? 理想情况下,像一个代表

 x =>_data[keyDefinedByAttribute]; 

你不能这样做。 您无法动态交换属性getter和setter的实现。 最接近的是:

  1. 动态代理
  2. AOP库

动态代理可能适合您,也可能不适合您,但IMO我更喜欢使用方法而不是方面的解决方案。 但是,动态行为将显示在代理类中(通过接口或通过动态子类化和覆盖虚拟属性)。

但在任何情况下都没有像SetGetMethodSetSetMethod那样的东西。