簡體   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