PropertyInfo.AddValueChanged Эквивалент для полей? - PullRequest
0 голосов
/ 12 июня 2009

Я пытаюсь найти эквивалент PropertyInfo.AddValueChanged для FieldInfo. Мне просто нужно получать событие каждый раз, когда значение поля изменяется. Я предполагаю, что ничего подобного нет, и мне придется манипулировать IL-кодом или чем-то в этом роде. Я готов пойти по этому пути, но какие-либо предложения о том, как я должен идти по этому поводу? И есть ли эквивалент AddValueChanged для полей, о которых я не знаю, поэтому мне не нужно идти по этому пути?

Спасибо.

Ответы [ 4 ]

1 голос
/ 12 июня 2009

Почему бы просто не обернуть поле в свойстве и не внедрить событие при изменении (т. Е. Сделать свой класс INotifyPropertyChanged или своим собственным equivelent)?

Это одна из прекрасных вещей в свойствах - они позволяют вам определять поведение таким образом. Поля не имеют равных, и манипулирование ИЛ не изменит этого. Пока это поле, оно не будет уведомлять.

0 голосов
/ 12 июня 2009

Вы выставляете открытые поля, которые вы пытаетесь контролировать? Похоже, вы должны обернуть их в свойствах и выставить их таким образом. Затем вы можете использовать уже полученный код мониторинга.

0 голосов
/ 12 июня 2009

Как указано в других ответах, из-за предоставленной вами ограниченной информации я бы посоветовал вам сделать любое присвоение значений через средство доступа к полю. Если он должен находиться за пределами какого-либо класса, вы можете создать отдельный класс (или структуру) (и поместить свое изменение поля в метод доступа.) Если вам не нужно несколько экземпляров поля, вы можете объявить его статическим и получить доступ только к нему. это через его аксессор.

0 голосов
/ 12 июня 2009

Позвольте мне подтвердить, что нет ничего встроенного, как то, что вы ищете. Свойства могут легко реализовать это, потому что метод установки является методом, в то время как у полей по своему дизайну нет методов метода установки, их значение просто изменяется, и это может произойти из любого места в коде. Чтобы сделать то, что вам нужно, я думаю, вы могли бы взглянуть на PostSharp.

...