gpt4 book ai didi

c# - 用 C# 中的 Reflection 或类似的(没有第 3 方库)替换 Property Getter/Setter

转载 作者:太空狗 更新时间:2023-10-29 21:46:49 26 4
gpt4 key购买 nike

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

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

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

  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 的实现。您可以获得的最接近的是:

  1. Dynamic proxies
  2. AOP 库

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

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

关于c# - 用 C# 中的 Reflection 或类似的(没有第 3 方库)替换 Property Getter/Setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com