我有autoproperties一堆公務艙:重構C#自動屬性字段和getter/setter屬性?
public class A {
public int Id { get; set; }
public string Title { get; set;}
}
由於應用程序的發展,出現了新的要求,以使跟蹤性能的變化,以便發送到後備存儲唯一改變的數據。
爲了達到這個目標,我必須對所有屬性轉換爲場+屬性是這樣的:
public class A {
private int m_Id;
public int Id {
get { return m_Id; }
set {
if(m_Id != value){
SetChanged("Id");
m_Id = value;
}
}
}
private string m_Title;
public string Title
{
get { return m_Title; }
set {
if(m_Title != value){
SetChanged("Title");
m_Title = value;
}
}
}
protecte void SetChanged(string propertyName) {
// Not important here
}
}
有沒有一種方法能夠快速重構我的代碼,以避免手動更改屬性?
如果您的所有業務類都只是具有自動屬性的類而沒有其他內容,那麼我會轉換爲使用[T4模板](http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx)來生成您的類。然後像上面那樣重新格式化它們是一個微不足道的變化。 – mellamokb 2012-07-05 15:37:46
正則表達式替換可能工作 - 也Resharper有這樣的事情,但它可能需要你依次做每一個。另外一個CodeSmith模板會在假設你知道如何使用它的情況下進行排序。否則,我會創建一個具有正確結構並重新執行屬性的代碼片段。代碼段會填入所有的位,但它仍然是一個手動工作!我會選擇正則表達式......或者像mellamokb所說的那樣,T4模板,我已經在他們的簡單的東西上取得了很好的成功 – Charleh 2012-07-05 15:38:36
您使用Resharper嗎?如果是這樣,它是一個快捷方式,有人已經擴展它來自動添加INotifyPropertyChanged支持:https://bitbucket.org/tgmayfield/resharper.tgmcontrib – 2012-07-05 15:39:32