如何提供动态属性?

时间:2010-02-23 18:46:58

标签: c# events properties

我正在使用一个带有字符串属性的类。当有人读取此属性的值时,我正在寻找某种事件通知,以便我可以动态提供属性。例如,通常有人会这样做:

string foo = someClass.Property;

它返回当前分配给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 个答案:

答案 0 :(得分:3)

为什么不使用普通属性getter?

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

如果你更愿意注入策略,你可以这样做:

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

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

然后

myclass.PropertyGetter = Console.ReadLine;

答案 1 :(得分:1)

如果您正在使用Property,那么您可能正在使用getter来创建动态字符串。

public String SomeProperty
{

get
 {
    return DynamicString();
 }

}

private String DynamicString()
{
   return "some dynamically generated string here.";
}

答案 2 :(得分:0)

听起来你想在运行时添加属性,而不使用特殊语法来访问它们。

因此myClass.Property在编译时不存在。

我的(猜测)是您需要为对象创建动态代理,以便拦截调用并提供缺少属性的实现。

我不确定.NET 4.0以及它是否使这更容易。