Как обеспечить динамическое свойство? - PullRequest
0 голосов
/ 23 февраля 2010

Я использую класс со строковым свойством. Я ищу какое-то уведомление о событии, когда кто-то читает значение этого свойства, чтобы я мог предоставить свойство динамически. Например, обычно кто-то делает:

string foo = someClass.Property;

И он возвращает любое строковое значение, присвоенное в данный момент свойству.

Однако я хочу сказать что-то вроде:

someClass.PropertyRead += new EventHandler<PropertyReadEventArgs>("Property", Property_Read);

private void Property_Read(object sender, PropertyReadEventArgs e)
{
    e.Value = "some dynamically generated string here.";
}

Есть идеи, возможно ли что-то подобное?

Ответы [ 3 ]

3 голосов
/ 23 февраля 2010

Почему бы не использовать средство получения простого свойства?

public string Property {
    get { return Generate(); }
}

Если вы предпочитаете вводить стратегию, вы можете сделать:

public Func<string> PropertyGetter{ get; set; }

public string Property{ 
   get{
       return PropertyGetter();
      }
}

А потом

myclass.PropertyGetter = Console.ReadLine;
1 голос
/ 23 февраля 2010

Если вы используете свойство, то вы, вероятно, используете геттер, в котором вы можете создать свою динамическую строку.

public String SomeProperty
{

get
 {
    return DynamicString();
 }

}

private String DynamicString()
{
   return "some dynamically generated string here.";
}
0 голосов
/ 23 февраля 2010

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

Таким образом, myClass.Property не существует во время компиляции.

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

Я не уверен насчет .NET 4.0 и облегчает ли это это или нет.

...