7

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

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 的 Class(Greeter) 中的属性,并将该属性的 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]; 
4

1 回答 1

4

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

  1. 动态代理
  2. AOP 库

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

但在任何情况下都没有类似SetGetMethodor的东西SetSetMethod

于 2011-07-26T19:58:43.470 回答