繁体   English   中英

使用setter上的操作来管理getter / setter的更好方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM