[英]Better way to manage getter/setter with Action on setter
我有一个对象,其中包含一个公共Action,以在第一个类中的属性发生更改时调用另一个类中的update方法。 看起来像这样:
public class FirstClass {
public Action Update;
private string _description;
public string Description
{
get { return _description; }
set
{
if (_description == value) return;
_description = value;
Update();
}
}
}
有大约30种不同的属性需要应用。 有没有更有效的方法来实现这一目标?
看起来您想使用面向方面的编程(AOP)。 我目前使用Postsharp( http://www.postsharp.net )实现此目的,但是也有其他选择。 以下说明与Postsharp有关-其他实现可能有所不同。
创建一个可以提供更新操作的界面。
public interface IUpdateAction {
public Action Update { get; }
}
然后创建一个方面,将其实现为属性
[PSerializable]
public class UpdateActionAttribute : LocationInterceptionAspect
{
public override void OnSetValue(LocationInterceptionArgs args)
{
if ( args.Value != args.GetCurrentValue() )
{
args.Value = args.Value;
args.ProceedSetValue();
((IUpdateAction)args.Instance).Update();
}
}
}
然后您可以将方面应用于您的课程
public class FirstClass : IUpdateAction {
public Action Update {get; set;}
[UpdateAction]
public string Description {get;set;}
}
编译代码后,重写器将启动并实现所分配属性的方面。
您可以使用多播将其所有属性或过滤后的列表应用到其中,从而进一步实现这一目标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.