【问题标题】:Attach external event to method将外部事件附加到方法
【发布时间】:2013-05-02 00:34:46
【问题描述】:

我的问题已经有一段时间了,我就是想不通。

如何将外部事件附加到方法或属性? 我的意思是,如何通过反射将事件附加到类,以便每当调用方法或属性访问器时都会引发事件(它应该看起来像这样:

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”中似乎没有任何意义,这是因为所有实际的“思考”都是由“父亲”完成的,他被提醒已向该属性提出了请求“Son1”类型的对象“s”的“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);
        }
    }

    ...
} 

【问题讨论】:

    标签: c# reflection


    【解决方案1】:

    如何将外部事件附加到方法或属性?我的意思是,如何通过反射将事件附加到类,以便每当调用方法或属性访问器时都会引发事件

    一般来说,你不能。这不是 .NET 开箱即用的支持。

    您可能想查看支持此类事情的 AOP 框架,例如 PostSharp

    (顺便说一句,即使是演示代码,我也会尝试遵守 .NET 命名约定。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多