我正在尝试为 FieldInfo 找到 PropertyInfo.AddValueChanged 的等价物。我基本上只需要在字段值发生变化的任何时候接收一个事件。我假设没有这样的东西,我将不得不操纵 IL 代码或类似的东西。我愿意走那条路,但是关于我应该如何去做的任何建议?对于我不知道的字段是否有等效的 AddValueChanged,所以我不必走那条路?
谢谢。
我正在尝试为 FieldInfo 找到 PropertyInfo.AddValueChanged 的等价物。我基本上只需要在字段值发生变化的任何时候接收一个事件。我假设没有这样的东西,我将不得不操纵 IL 代码或类似的东西。我愿意走那条路,但是关于我应该如何去做的任何建议?对于我不知道的字段是否有等效的 AddValueChanged,所以我不必走那条路?
谢谢。
为什么不将字段包装在一个属性中,并在更改时实现一个事件(即:使您的类 INotifyPropertyChanged 或您自己的等价类)?
这是关于属性的美妙之处之一——它们允许您以这种方式定义行为。字段没有任何等效项,并且操纵 IL 不会改变这一点。只要是字段,它就不会通知。
让我确认一下,没有什么像你所追求的那样内置。属性可以很容易地实现这一点,因为 setter 是一种方法,而设计的字段没有 setter 方法,它们的值只是被修改了,并且可以从代码中的任何位置发生。为了做你想做的事,我想你可以看看 PostSharp。
如其他答案所示,由于您提供的信息有限,我建议您通过该字段的访问器进行任何值分配。如果它需要在任何类之外,您可以创建一个单独的类(或结构)(并将您的字段更改放在访问器中。)如果您不需要该字段的多个实例,您可以将其声明为静态并且仅访问它通过它的访问者。
您是否公开了您试图监控的公共领域?似乎您应该将它们包装在属性中并以这种方式公开它们。然后就可以使用已有的监控代码了。