我正在使用一个带有字符串属性的类。当有人读取此属性的值时,我正在寻找某种事件通知,以便我可以动态提供属性。例如,通常有人会这样做:
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.";
}
是否有可能这样的事情?
答案 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以及它是否使这更容易。