2009年2月28日 星期六

Deprecated的用途

這邊我參考JAVA所寫的文件說明,來解釋為何需要使用這個關鍵字,請點我

主要會用到這個的原因即是來自於我們已經不再建議使用這個類別、方法或是屬性,

通常會發生的原因是以前所考慮的範圍現在已經無法滿足現況,可能需要更多的資訊或是更正確的內容

可能使用的原因為:

  • 舊的元件不安全、有bug或是條件不足

  • 未來將不再有此元件

  • 用了錯的方法



舉例來說,我們如果開發了某個元件,而這個元件已經有許多客戶需要使用,

所有的客戶可以對此元件呼叫以取得所需的內容或處理時,而我們已經不再建議客戶某個處理程序時,

這時Deprecated就能夠發揮他的用處了。

由於我們的元件可能因為某些因素需要更新,而為了不影響現在正在使用舊元件的使用者正常運作,

我們可以用此類別告訴使用者這個方法已經不建議再使用。接下來要分別說明JAVA與C#要如何撰寫。

Java的Deprecated(J2SE 5.0以後開始支援)能夠在類別、方法以及欄位使用,

@deprecated(從1.1版即可使用)這個notation則是給javadoc產文件時使用,如下例所示:

/**
* Delete multiple items from the list.
*
* @deprecated Not for public use.
* This method is expected to be retained only as a package
* private method. Replaced by
* {@link #remove(int)} and {@link #removeAll()}
*/
@Deprecated public synchronized void delItems(int start, int end) {
...
}

從上面這個例子我們可以看到@Deprecated@deprecated可以同時使用,@Deprecated是直接在宣告類別、函數或是屬性,
而@deprecated 則是在註解的地方宣告,如果我們希望這個方法能夠告訴客戶用哪個類別、函數或是屬性取代,則需多加{@link #取代的名稱}
而C#要用Obsolete(System.ObsoleteAttribute)這個關鍵字來註明,其宣告方式如下所示:

public class MyClass
{
[Obsolete("Don't use OldWay; use NewWay instead", true)]
static void OldWay( ) { Console.WriteLine("Silly me!"); }
static void NewWay( ) { Console.WriteLine("D'oh!"); }
public static void Main( )
{
OldWay( );
}
}

Obsolete的第二個參數並沒有限制一定要給,如果沒有給則認定為不是個錯,Compiler時不會跳出錯誤訊息。

沒有留言:

張貼留言