我想標記一個方法/類...已過時但只在特定日期之後。例如,這個類將在6個月內過時,讓其他開發人員有時間來實現新的體系結構。特定日期後過時了嗎?
C#中是否存在一個現有的屬性?或者我應該實施我自己的?
所有項目都將警告視爲錯誤,因此ObsoleteAttribute不回答此問題。
我想標記一個方法/類...已過時但只在特定日期之後。例如,這個類將在6個月內過時,讓其他開發人員有時間來實現新的體系結構。特定日期後過時了嗎?
C#中是否存在一個現有的屬性?或者我應該實施我自己的?
所有項目都將警告視爲錯誤,因此ObsoleteAttribute不回答此問題。
而不是將這些信息烘焙到代碼中,通常會發布發展路線圖以及將要發生的任何重大更改。棄用的功能並不一定會發生重大變化。
即使您爲IDE編寫一個機制來使用此「延遲棄用」,其他開發人員也需要此VS擴展才能使用此擴展。
只需發佈一個文件,說明將要廢棄/損壞的內容,然後在時間到的時候使用該屬性棄用它。
「將警告視爲錯誤」只會在您棄用的時候影響您,但這意味着您要謹慎地從舊代碼遷移到新代碼。當然,如果您需要提供向後兼容性,您需要停止將警告視爲錯誤(爲了讓代碼使用已棄用的代碼來支持)或在棄用時禁止警告,但這可能會變得雜亂無章。
沒有建立對延期棄用的支持,我不知道任何第三方解決方案在野外 - 所以現在你是獨立的。
我同意。問題是其他開發人員使用相同的源代碼,但我們有專門的部分。因此,改變我的課程的影響或其他 –
如果你用這樣的東西開始你的方法怎麼辦?
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日(在該示例中)開始投擲。
進一步採取這一想法,並使用代碼合同來執行日期:-)也就是說,如果這是由第三方消費,我會避免拋出異常,因爲我沒有希望他們使用舊代碼 - 您所做的每一項改變都將是一次突破性改變。 –
@AdamHouldsworth我對代碼合同不是很熟悉,請在您自己的答案中張貼一些代碼!概念聽起來有趣。 – Alex
我不會在自己的答案中發佈它,因爲我幾乎完全不同意它作爲提議的解決方案。閱讀代碼合同(現在在.NET 4中),執行此操作所需的代碼相當簡單,與當前代碼不太相似:http://msdn.microsoft.com/zh-cn/library/dd264808。 aspx –
如果您將所有警告視爲錯誤,您不應該通過不使用已棄用的代碼來解決警告嗎? – Tharwen
沒有內置的功能來做到這一點。 –
你必須使用已過時。這迫使開發人員儘快更改其代碼。給他們能力使用新鮮的代碼。 – acoolaum