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管道托管时才可以
public string Name
{
get;
[MethodExecute("Log")] [MethodExecute("Save")] set;
}