2014-12-03 59 views
2

我不知道这是否可能。我试图运行一个自定义代码的属性被设置,我想在运行时使用反射来做到这一点。在设置值时,我无法找到运行一段自定义代码的方法。使用反射在属性集方法中插入代码.Net

我可以获得对setInfoInfo的引用,但我不知道这是否是正确的方法。

正如我所说我甚至不知道这是否可能。

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

    MethodInfo mInfo = pInfos[0].GetSetMethod(); 
+0

这是不可能实现使用反射。你能描述一下你想完成的终极任务吗? – Dennis 2014-12-03 10:48:54

+0

而且您无法访问源代码以正确更改它? – DavidG 2014-12-03 10:49:01

+0

你想用反射权设置一个属性吗? – faby 2014-12-03 10:50:56

回答

1

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

你也许可以看看PostSharp它使用AOP的概念,并可以在编译时自动实现这个功能。警告:虽然这可能会解决您今天的问题,但当开发人员发现事情像魔术一样发生时,可能会导致未来维护的头痛。

WPF中还有一个名为INotifyPropertyChanged的接口,可能会有所帮助。这是我之前提到的相同模式,并允许您在财产更改时提出事件。此外,只有当数值发生变化时,才有机会触发事件,而不是每次调用setter时。

我个人更喜欢任何需要显式代码的解决方案(即INotifyPropertyChanged解决方案)。虽然它是重复的代码,将在每个setter中,但意图是明确的,当你遇到规则的例外(你不希望事件被触发)时,你不必想出一个复杂的机制来解决您的全面解决方案。