C#创建属性,指示在属性调用后运行代码

C#创建属性,指示在属性调用后运行代码,c#,.net,proxy,properties,attributes,C#,.net,Proxy,Properties,Attributes,我想创建一个属性来放置在属性上 包含此属性的属性将在设置新值后执行另一个方法 例如: [MethodExecute(Log)] [MethodExecute(Save)] public string Name { get { return name; } set { name = value; } } 这里我想激

我想创建一个属性来放置在属性上

包含此属性的属性将在设置新值后执行另一个方法

例如:

    [MethodExecute(Log)]
    [MethodExecute(Save)]
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
这里我想激活两个方法,一个将记录更改,另一个将保存更改

谢谢,
罗尼

我相信你可以在家里做到这一点。不幸的是,您需要将方法名称指定为字符串-C#中没有运算符将方法名称解析为
MethodInfo
,尽管已经提出过几次

如果只需要在setter(而不是getter)之后执行代码,则可能需要移动属性:


(为了简单起见,这使用了一个自动实现的属性。)

您真正要问的是.NET framework是否有面向方面编程(AOP)的挂钩。不幸的是,答案是否定的,不是默认的

有许多框架允许您这样做,但大多数框架要求这样修饰的类型由专门的工厂创建

  • 许多DI容器都具有收集拦截功能,允许您这样做。这种DI容器的一个例子是
  • Microsoft patterns&practices曾经提出了支持这种场景的解决方案
  • 在更特殊的情况下,您也可以在某些子框架中看到这一点-例如,ASP.NET MVC有一个称为ActionFilter的东西,它可以这样工作,但只有在由MVC管道托管时才可以
还有一些框架允许您在编译IL后通过修改它来实现这一点,但据我所知,也存在一些非常严重的缺点。

您也可以使用依赖注入容器。作为例子,

public string Name
{ 
    get; 
    [MethodExecute("Log")] [MethodExecute("Save")] set;
}