我們有我們使用的一些MVC-like系統,其中,在後代每個屬性是這樣寫的基本對象:PostSharp方面,調用泛型方法
public String FirstName
{
get { return GetProperty<String>("FirstName", ref _FirstName); }
set { SetProperty<String>("FirstName", ref _FirstName, value); }
}
這是用於調試完成兩目的以及通知和驗證目的。我們使用getter來告訴我們哪些代碼已經明確地標記了它將要讀取的內容(爲了讓基類只能在這些屬性改變時才能調用它)並且弄錯了,我們使用setter屬性更改通知,髒標誌處理,驗證等
爲簡單起見,我們假設這些方法的實施看起來是這樣的:
protected T GetProperty<T>(String propertyName,
ref T backingField)
{
return backingField;
}
protected Boolean SetProperty<T>(String propertyName,
ref T backingField,
T newValue)
{
backingField = newValue;
return true;
}
有在這兩個過程中更多的代碼,但此代碼與我的問題無關,或者至少我希望如此。如果是,我會修改這個問題。
無論如何,我想寫一個PostSharp方面,可自動實現了我的電話,就自動屬性,像這樣:
public String FirstName { get; set; }
有沒有人在那裏,有一些想法,我怎麼會去關於這樣做?
我自己做了OnMethodBoundaryAspect類,但用ref參數調用泛型實現的藝術無法迴避。
這裏有兩個類,我想擴充TestObject類來自動調用屬性get和set的正確方法。
public class BaseObject
{
protected T GetProperty<T>(String propertyName,
ref T backingField)
{
return backingField;
}
protected Boolean SetProperty<T>(String propertyName,
ref T backingField,
T newValue)
{
backingField = newValue;
}
}
public class TestObject : BaseObject
{
public String FirstName
{
get;
set;
}
public String LastName
{
get;
set;
}
}
編輯:發佈PostSharp forum爲好。