用反射或类似的(没有第三方库)替换c#中的属性Getter/Setter

本文关键字:替换 属性 Setter Getter 第三方 反射 | 更新日期: 2023-09-27 18:03:42

我在一个类中包含了一个属性例如

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; }

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

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

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

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

有没有提供程序指出在运行时设置Get/Set方法?理想情况下是像

这样的委托
x =>_data[keyDefinedByAttribute]; 

用反射或类似的(没有第三方库)替换c#中的属性Getter/Setter

你不能这么做。不能动态地交换属性getter和setter的实现。你能得到的最接近的是:

  1. 动态代理
  2. <
  3. AOP库/gh>

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

但是在任何情况下都不会有类似SetGetMethodSetSetMethod的东西