使用反射在属性集方法 .Net 中插入代码

本文关键字:Net 插入 代码 方法 反射 属性 | 更新日期: 2023-09-27 18:32:52

我不知道这是否可能。我正在尝试在正在设置的属性上运行一段自定义代码,我正在尝试在运行时使用反射执行此操作。设置值时,我无法找到运行一段自定义代码的方法。

我可以得到对集合MethodInfo的引用,但我不知道这是否是正确的方法。

正如我所说,我什至不确定这是否可能。

  PropertyInfo[] pInfos = this.GetType().GetProperties();
  MethodInfo mInfo = pInfos[0].GetSetMethod();

我正在尝试做的是拥有一个基本对象,该对象可以将属性更改事件附加到具有自定义属性的每个属性。无需在实现基对象的每个类上手动设置 setter 方法。然后,该事件将触发在设置属性值时更改的属性。

使用反射在属性集方法 .Net 中插入代码

听起来好像

你最好使用装饰器模式包装目标类。假设您要包装的类是您没有源代码的第三方类。然后,您可以包装您感兴趣的资源库,并在设置属性时在包装类上引发事件。

你可以看看PostSharp,它使用AOP的概念,可以在编译时自动为你实现这个功能。 警告:虽然这可能会解决您今天的问题,但它可能会给未来的维护带来麻烦,因为开发人员可能会发现事情就像变魔术一样发生。

WPF 中还有一个名为 INotifyPropertyChanged 的接口可能会有所帮助。 这与我之前提到的模式相同,允许您在属性更改时引发事件。 此外,这使您可以仅在更改值时才触发事件,而不是每次调用 setter 时触发事件。

就个人而言,我更喜欢任何需要显式代码的解决方案(即INotifyPropertyChanged解决方案(。 尽管它是在每个资源库中重复的代码,但意图是明确的,当您遇到规则的异常(您不希望触发事件(时,您不必提出一个复杂的机制来绕过您的包罗万象解决方案。