2011-08-22 35 views
4

在.NET中,您可以將某些方法標記爲過時,以便在嘗試使用不推薦使用的方法時向開發人員發出警報。將本地方法標記爲已棄用/過時?

<Obsolete("Do not call this method.")> Private Sub FormerMethod() 

事情是你只能在你控制的類內做到這一點。當您希望開發人員避免在.NET中或供應商本地提供的類中使用某些方法時,您會做什麼?

例如,如果您希望開發人員選擇DataTable而不是Select的自定義擴展方法,該怎麼辦?我討厭必須定義一個DataTable類的定製版本,如果只是反對Select。這將使我們不得不警察是否使用定製桌子。

我知道有像(FxCop)這樣的工具可以幫助執行編碼標準;但是,我的問題是,如果沒有第三方工具,這是否可以處理。

+1

您是否執行代碼審查? –

+0

+1這也是一個很好的建議。 – Tejs

回答

2

雖然你可能不喜歡答案,但我認爲包裝將是合適的選擇。

對於第三方供應商的代碼,包裝應該是強制性的,只是爲了產生單元測試的抽象級別。作爲一個包裝,你顯然可以將方法標記爲Obsolete

對於.NET對象,這有點棘手。顯然,有人可以包括命名空間並去鎮上;我不認爲像你想要的那樣,這個問題只有一個'僅用於代碼'的解決方案,除了可能做一個集成測試來搜索你的解決方案,並在你不喜歡的特定方法被調用時失敗。

+0

我認爲包裝可能是一個很好的方法,因爲我不知道.NET允許我做我想做的事情。謝謝! – Mario

2

如果要將.Net Framework類標記爲不贊成使用,可以在每個人都使用的共享\ infrastructure類之一中重新定義它。

實施例:

namespace System.ComponentModel 
{ 
    [Obsolete("Please do not use BackgroundWorker. Use class XXXX instead.")]  
    public class BackgroundWorker 
    { 

    } 
} 

它可能通過擴展原始.Net框架類,然後覆蓋該調用基的方法,但與Obsolete屬性裝飾具體方法也做了具體的方法。

但是,您需要解析循環類定義(可能通過使用程序集引用別名)。

+0

這似乎適用於廢棄System類。 –

相關問題