【轉】編寫高質量代碼改善C#程序的157個建議——建議156:利用特性為應用程序提供多個版本
阿新 • • 發佈:2017-12-11
如果 目的 ole pos 兩個 img 分享圖片 離線版 attr
建議156:利用特性為應用程序提供多個版本
基於如下理由,需要為應用程序提供多個版本:
- 應用程序有體驗版和完整功能版。
- 應用程序在叠代過程中需要屏蔽一些不成熟的功能。
假設我們的應用程序共有兩類功能:第一類功能屬於單機版,而第二類的完整版還提供了在線功能。那麽,在功能上,需要定制兩個屬性“ONLINE”和“OFFLINE”。在體驗版中,我們只開放“OFFLINE”功能。要實現此目的,不應該提供兩套應用程序,而應該通過最小設置。為一個應用程序輸出兩個發布版本。這一切,可以通過.NET中的特性(Attribute)來實現。
class MyService { [Conditional("ONLINE")] public void Testing() { Console.WriteLine("完整功能版"); } [Conditional("OFFLINE")] [Conditional("ONLINE")] public void GetInfoFromNet() { Console.WriteLine("單機功能版"); } } class Program {static void Main(string[] args) { MyService service=new MyService(); service.Testing(); service.GetInfoFromNet(); } }
要實現兩個不同的功能,需要在程序入口這個文件最開頭定義:
#define ONLINE
//#define OFFLINE
這條編譯符號一定要在文件的最開頭。同時,該定義只對本文件有效。如果要想定義全局編譯符號,則必須在項目屬性中定義。如圖:
如果想定義多個全局宏定義,則用逗號隔開,如“OFFLINE,ONLINE”。
如果要發布所有功能,就輸入條件編譯符號#define ONLINE,代碼運行如下:
完整版功能
單機版功能
如果要發布離線版功能,就用#define OFFLINE。運行如下:
單機版功能
轉自:《編寫高質量代碼改善C#程序的157個建議》陸敏技
【轉】編寫高質量代碼改善C#程序的157個建議——建議156:利用特性為應用程序提供多個版本