2009-06-12 36 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

您是否正在公開您正在監視的公共字段?看起來你應該將它們包裝在屬性中並以這種方式公開它們。然後你可以使用你已經有的監控代碼。