2012-05-23 80 views
3

我想標記一個方法/類...已過時但只在特定日期之後。例如,這個類將在6個月內過時,讓其他開發人員有時間來實現新的體系結構。特定日期後過時了嗎?

C#中是否存在一個現有的屬性?或者我應該實施我自己的?

所有項目都將警告視爲錯誤,因此ObsoleteAttribute不回答此問題。

+0

如果您將所有警告視爲錯誤,您不應該通過不使用已棄用的代碼來解決警告嗎? – Tharwen

+1

沒有內置的功能來做到這一點。 –

+0

你必須使用已過時。這迫使開發人員儘快更改其代碼。給他們能力使用新鮮的代碼。 – acoolaum

回答

4

而不是將這些信息烘焙到代碼中,通常會發布發展路線圖以及將要發生的任何重大更改。棄用的功能並不一定會發生重大變化。

即使您爲IDE編寫一個機制來使用此「延遲棄用」,其他開發人員也需要此VS擴展才能使用此擴展。

只需發佈一個文件,說明將要廢棄/損壞的內容,然後在時間到的時候使用該屬性棄用它。

「將警告視爲錯誤」只會在您棄用的時候影響您,但這意味着您要謹慎地從舊代碼遷移到新代碼。當然,如果您需要提供向後兼容性,您需要停止將警告視爲錯誤(爲了讓代碼使用已棄用的代碼來支持)或在棄用時禁止警告,但這可能會變得雜亂無章。

沒有建立對延期棄用的支持,我不知道任何第三方解決方案在野外 - 所以現在你是獨立的。

+0

我同意。問題是其他開發人員使用相同的源代碼,但我們有專門的部分。因此,改變我的課程的影響或其他 –

2

如果你用這樣的東西開始你的方法怎麼辦?

void method() 
{ 
    if(System.Diagnostics.Debugger.IsAttached) // you want your application to work, but warn developers 
    { 
     string DeprecatedFrom = "200"; //example date: 31 dec 2000 
     if (string.Format("{0:yyyymmdd}",DateTime.Now).Equals(DeprecatedFrom)) throw new NotSupportedException("Don't use this method."); 
    } 
} 

原油,但有效:方法將在2000年12月31日(在該示例中)開始投擲。

+0

進一步採取這一想法,並使用代碼合同來執行日期:-)也就是說,如果這是由第三方消費,我會避免拋出異常,因爲我沒有希望他們使用舊代碼 - 您所做的每一項改變都將是一次突破性改變。 –

+0

@AdamHouldsworth我對代碼合同不是很熟悉,請在您自己的答案中張貼一些代碼!概念聽起來有趣。 – Alex

+0

我不會在自己的答案中發佈它,因爲我幾乎完全不同意它作爲提議的解決方案。閱讀代碼合同(現在在.NET 4中),執行此操作所需的代碼相當簡單,與當前代碼不太相似:http://msdn.microsoft.com/zh-cn/library/dd264808。 aspx –