2010-07-23 3 views
4

Я хотел бы получить getter свойства, чтобы я мог перейти к методу, который требует Func. На данный момент я извлек getter в метод Get, и я использую этот метод, когда мне нужна функция getter.Как получить getter собственности?

Несколько слов о background: У меня есть класс A со свойствами, и у меня есть еще один класс T, который отслеживает некоторые свойства из A (и из класса B, C и т. Д.). Сохранение трека означает здесь, что, когда объект T запрашивается о текущих значениях отслеживаемых свойств, он должен давать такие.

Одним из подходов может быть механизм уведомления об изменении, но класс А не знает, что отслеживается или нет, поэтому это неправильный подход. Вы должны переписать все классы, которые можно отследить . Кроме того, уведомления должны быть отправлены все время, даже если трекер не будет задан вопрос о значениях вообще.

Кажется более удобным просто передать метод, как читать значение (getter of property), и трекер будет использовать его, когда потребуется. Нет накладных расходов, довольно просто.

ответ

6

Скомпилированный код или отражение? В качестве делегата, вы можете просто использовать:

Func<Foo, int> func = x => x.SomeValue; 

или отслеживать конкретный объект:

Func<int> funct =() => someObj.SomeValue; 

С отражением вы нуждаетесь GetGetMethod() и Delegate.CreateDelegate()

+0

Почему я не думал о что? Красота, спасибо вам большое! – greenoldman

+0

Вот почему мы все обманываем лямбда в C#;) –

5
var getter = typeof(DateTime).GetProperty("Now").GetGetMethod(); 
var func = Delegate.CreateDelegate(getter, typeof(Func<DateTime>)) 
       as Func<DateTime>; 
0

Еще один вариант:

Func<int> getCurrentValue = delegate { return IntValue; }; 
Смежные вопросы