[C#] 使用 ObsoleteAttribute 宣告過期的功能

  • 2198
  • 0
  • 2015-02-11

摘要:[C#] 使用 Obsolete 宣告過期的函式

如果您是一位公用函式庫的開發者,您應該會遇上一個狀況

 

今天 V1.0 釋出時製作了一個功能A,但隨著功能的演進

你寫了個更好的寫法來取代原功能,在這裡稱之為功能B吧

 

身為一位處女座的開發人員,我希望我的程式碼能夠乾乾淨淨的,每一行都能符合心目中的完美流程

然後舊的東西最好能通通 Delete,就跟房間一樣一塵不染! Perfect!!

 

BUT !

 

公用函式庫這種東西就跟潑出去的水一樣無法覆收

一旦版本釋出了大概就會有所謂的歷史包袱

或者您可以直接把舊功能刪除,當然如果有人更新函式庫時大概就會跳錯誤

嚴重點造成軟體崩潰

接下來大概就是無限的電話、Email轟炸

最終我想不怎麼意外的結果應該是上頭逼著你把功能拿回來,至少讓它不要跳錯誤

這太悲慘了,我想還是不要發生得好

 

 

那來個折衷方法吧


public class MyClass
{
    public MyClass()
    {

    }

    //宣告函式已過期,並輸入警告提示訊息
    [Obsolete("這功能過期囉!")]
    public void DoSomething()
    {
        Console.WriteLine("Hello!!");
    }
}

 

 

如果要引用端的程式引發編譯錯誤則這樣宣告

說明:ObsoleteAttribute 建構函式 (String, Boolean)

 


[Obsolete("這功能過期囉!", true)]

 

效果

若有參考到此過期函式的地方則會顯示警告訊息,編譯時期的輸出也會顯示

 

如果版本已大幅演進並且聲明無法向下相容,那麼則不要做此屬性宣告,就大膽地移除吧

但在實務上許多知名的套件也都存在著陳年的程式碼,相信連微軟內部在處理過期功能時也會審慎看待

畢竟這影響實在太大了

 

其實這 Obsolete 可以看成一種免責聲明

「我已經先警告你這功能已過時,您當然可以繼續使用,但如果發生問題一概不負責」

 

參考

Obsolete (C# 程式設計手冊)