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