用反射或类似的(没有第三方库)替换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];
你不能这么做。不能动态地交换属性getter和setter的实现。你能得到的最接近的是:
- 动态代理 <
- AOP库/gh>
动态代理可能适合也可能不适合您,但在我看来,我更喜欢使用它而不是方面的解决方案。然而,动态行为将在代理类(接口或通过动态子类化和覆盖您的虚拟属性)中出现。
但是在任何情况下都不会有类似SetGetMethod
或SetSetMethod
的东西