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

Wes*_*101 5 .net c# reflection

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

我可以获得该集的参考MethodInfo,但我不知道这是否是正确的方法。

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

  PropertyInfo[] pInfos = this.GetType().GetProperties();

  MethodInfo mInfo = pInfos[0].GetSetMethod();
Run Code Online (Sandbox Code Playgroud)

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

Adr*_*ips 1

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

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

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

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