Как получить приобретатель недвижимости? - PullRequest
4 голосов
/ 23 июля 2010

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 23 июля 2010

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

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

или для отслеживания определенного объекта:

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

С отражением вам понадобится GetGetMethod() и Delegate.CreateDelegate()

6 голосов
/ 23 июля 2010
var getter = typeof(DateTime).GetProperty("Now").GetGetMethod();
var func = Delegate.CreateDelegate(getter, typeof(Func<DateTime>)) 
               as Func<DateTime>;
0 голосов
/ 18 ноября 2016

Просто еще один вариант:

Func<int> getCurrentValue = delegate { return IntValue; };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...