最近又再重操舊業開始撰寫共用 Library,共用 Library主要用意是希望可以加速同事開發上的速度,像是與 DB 溝通或是撰寫 CRUD 每個專案都會用到的 function 或是 API,或者是每個專案都會用到的檢查邏輯抽出來讓大家使用,讓大家不用在重複造輪子以加速其他同仁在專案上的開發速度,在此專案開發時由於迭代的速度與變化較快,因此也常遇到第一版提供的 API V1 版本經過兩天後就調整為 V2 版本提供新版,此時方案或專案中勢必會有已經在使用的 V1 的 method,最快速地解法就是直接使用 resharper rename ( Ctrl + R + R ) 將參考到的方法一併換掉,簡單又迅速不花太多時間,今天要介紹的是另外一種作法是使用 Obsolete 屬性,提醒其他開發者所定義的 method 已經過期 / 過時,這篇就針對 Obsolete 此屬性做簡單介紹,若有更好的方式歡迎隨時提出來一起討論。
ObsoleteAttribute 位於 system 的命名空間( namespace),因此要使用時不需要 using 其他 namespace 就可以使用,在 ObsoleteAttribute 提供三組 API 簽章讓開發者來設定方法已過時或是棄用,針對各 API 使用分別介紹如下
ObsoleteAttribute
可以在過時的方法上加上 obsoletAttribute,使用沒有參數的建構子方法,下面為定義 method1 已過時
[Obsolete] public static string Method1() { return "I'm method1 !!"; } static void Main(string[] args) { Method1(); }將滑鼠游標移至 Method1 上方時,可以看到參考到過時的方法時下方會出現淡綠色線,Visual Studio IDE 會提示開發者該方法已過時 ( Method1 is Obsolete)
ObsoleteAttribute(String)
第一種方式提示的訊息都是固定的 xxx is obsolete,如果希望提示訊息可以客製化可以使用此方法簽章,舉例來說 method1 已棄用,希望開發者在使用時可以改用 method2,可以參考下列 sample code
[Obsolete("Method is obsolete :( please use method2")] public static void Method1() { Console.WriteLine("I'm method1 !!"); } public static void Method2() { Console.WriteLine("I'm method2 !!"); } static void Main(string[] args) { Method1(); }將滑鼠游標移至 Method1 上方時,可以看到參考到過時的方法會呈現自訂的訊息內容
ObsoleteAttribute(String, Boolean)
此簽章包含下列兩個屬性
舉例來說希望強制有使用/參考到 method1 方法的類別都無法使用,則需要設定 IsError 為 true,參考下列 sample code
[Obsolete("Method1 is not support, Please use method2", true)] public static void Method1() { Console.WriteLine("I'm method1 !!"); } public static void Method2() { Console.WriteLine("I'm method2 !!"); } static void Main(string[] args) { Method1(); }
與上面的都不一樣,在編譯則會跳錯誤並提示開發者你所定義的訊息內容,如下所示
希望透過以上的說明,可以讓大家對於在 C# 中如何設定方法過期/棄用時更加了解,如果有不清楚的地方歡迎一起討論,hope it helps !
希望透過以上的說明,可以讓大家對於在 C# 中如何設定方法過期/棄用時更加了解,如果有不清楚的地方歡迎一起討論,hope it helps !
參考
Using the Obsolete Attribute in C#
0 意見:
張貼留言