2012-01-27 60 views
1

我將如何使用PostSharp替換此:如何使用PostSharp來警告如果一個屬性被初始化之前被訪問?

[WarnIfGetButUninitialized] 
public int MyProperty {get; set; } 

有了這個:

/// <summary> 
/// Property which warns you if its value is fetched before it has been specifically instantiated. 
/// </summary> 
private bool backingFieldIsPopulated = false; 
private int backingField; 
public int MyProperty { 
    get 
    { 
     if (backingFieldIsPopulated == false) 
     { 
      Console.WriteLine("Error: cannot fetch property before it has been initialized properly.\n"); 
      return 0; 
     } 
     return backingField; 
    } 
    set { 
     backingField = value; 
     backingFieldIsPopulated = true; 
    } 
}  

更新

我還要補充一點,這是爲了提高代碼的可靠性的好方法。在一個擁有20,000條線路的項目中,很高興知道在使用之前所有事情都已正確初始化。我打算將其用於Debug版本,並在發佈版本中將其刪除,因爲我不想不必要地減慢發行版的速度。

+0

可能重複的[如何通過添加屬性來訪問屬性而無需初始化訪問屬性?](http://stackoverflow.com/questions/9033385/how-to-warn-if-a-property- is-access-without-being-initial-by-adding-an-at) – Caleb 2012-01-30 04:45:47

回答

1

從蓋爾Fraiteur上PostSharp論壇(感謝蓋爾!):

你必須使用實現 IInstanceScopedAspect一個LocationInterceptionAspect。字段'backingFieldIsPopulated'成爲該方面的 字段。

您可以在這個例子中找到靈感:

http://doc.sharpcrafters.com/postsharp-2.1/Content.aspx/PostSharp-2.1.chm/html/d3631074-e131-467e-947b-d99f348eb40d.htm

+1

處理屬性的另一個例子:見http://www.sharpcrafters.com/forum/Topic3876-19-1.aspx – Contango 2012-01-27 13:55:38

1

談談你的構造可以正確初始化它,然後你不擔心嗎?

+1

當然,如果你正在開發一個100線項目。如果您正在開發一個50,000線項目,那麼在開發階段的這種技術會捕獲由於人爲錯誤而可能通過網絡的錯誤。這種技術也適用於檢查遺留代碼。它的一個小技巧可以幫助生成強大的企業級代碼。 – Contango 2012-01-30 09:50:45

相關問題