我有一段时间遇到了问题而且我无法理解。
如何将外部事件附加到方法或属性? 我的意思是,如何通过反射将事件附加到类中,以便每当调用方法或属性访问器时,都会引发事件(它应该看起来像这样:
OnPropertyAccessing(object sender, PropertyInfo property, EventArgs e)
我基本上需要的是以某种方式创建一个抽象类(或使用扩展的外部)(使用反射)处理所有属性或方法调用,它的子节点充当虚拟类,其唯一的意义是属性的名称。
我希望这可能不清楚,例如:
public class Father
{ ... }
public class Son1 : Father
{
public string aaa {get; set;}
public string bbb {get; set;}
}
public class Son2 : Father
{
public DateTime ccc {get;set;}
}
正如你所看到的,“Son1”和“Son2”似乎没有任何意义,这是因为所有实际的“思考”都是由“父亲”完成的,他们被警告已经向该财产提出了请求对象“s”类型为“Son1”的“aaa”,反过来决定属性应返回的内容。
显然,我不想写这样的东西:
public class Father
{
protected object pget(string propertyName)
{ ... }
protected void pset(string propertyName, object value)
{ ...}
}
public class Son1 : Father
{
public string aaa
{
get
{
return base.pget("aaa").toString();
}
set
{
base.pset("aaa", value);
}
}
...
}
答案 0 :(得分:0)
如何将外部事件附加到方法或属性?我的意思是,如何通过反射将事件附加到类中,以便每当调用方法或属性访问器时,都会引发事件
总的来说,你不能。这不是.NET支持开箱即用的东西。
您可能希望查看支持此类事情的PostSharp等AOP框架。
(顺便说一句,即使是演示代码,我也会尝试坚持使用.NET命名约定。)