2009-06-12 38 views
0

我正在试图为FieldInfo找到PropertyInfo.AddValueChanged的等价物。我基本上只需要在场的值发生变化时收到一个事件。我假设没有这样的事情,我将不得不操纵IL代码或类似的东西。我愿意走这条路,但是我应该如何去做呢?有没有一个AddValueChanged等价于我不知道的字段,所以我不必去那条路线?PropertyInfo.AddValueChanged等价于字段?

谢谢。

+0

这实际上是一个属性网格类型控制,也适用于字段和哈希表。因此,如果事情在我的控制范围之外改变,我需要得到通知。因此,将物品包装在物业中并不是一种选择,因为我不是在写我正在反思的课程。这就是为什么我提到IL代码的原因......我想通过一些魔法我可以在运行时创建一个属性来包装该领域,并发送一个事件在其设置访问器... – Thrash505 2009-06-12 18:26:47

回答

1

为什么不只是将该字段包装在属性中,并在变更时实现事件(即:让您的类INotifyPropertyChanged或您自己的等价)?

这是关于属性的美丽事物 - 它们允许您以这种方式定义行为。领域没有任何等价的,操纵IL不会改变这一点。只要它是一个领域,它将不会通知。

+0

这实际上是一个属性网格类型控制,也适用于字段和散列表。因此,如果事情在我的控制范围之外改变,我需要得到通知。因此,将物品包装在物业中并不是一种选择,因为我不是在写我正在反思的课程。 这就是为什么我提到IL代码......我想通过一些魔法我可以在运行时创建一个属性来包装该领域并发送一个事件在其设置访问器... – Thrash505 2009-06-12 18:24:41

0

让我只是确认没有像你之后的内置内置。属性可以很容易地实现,因为setter是一种方法,而按设计的字段没有setter方法,它们的值只是被修改,并且可以从代码中的任何地方发生。要做你以后的事情,我想你可以看看PostSharp。

+0

PostSharp似乎应该是能够我后来的因为功能说,“添加行为字段”,但我似乎无法找到一个示例显示该功能。 – Thrash505 2009-06-12 19:05:01

0

正如其他答案中所指出的那样,在您提供的信息有限的情况下,我建议您通过字段的访问者进行任何值赋值。如果它需要在任何类之外,你可以创建一个单独的类(或者struc)(并且把你的字段改变到一个存取器中)。如果你不需要这个字段的多个实例,你可以声明它是静态的并且只能访问它通过它的accesor。

0

您是否正在公开您正在监视的公共字段?看起来你应该将它们包装在属性中并以这种方式公开它们。然后你可以使用你已经有的监控代码。