1. 程式人生 > >【轉】編寫高質量代碼改善C#程序的157個建議——建議156:利用特性為應用程序提供多個版本

【轉】編寫高質量代碼改善C#程序的157個建議——建議156:利用特性為應用程序提供多個版本

如果 目的 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:利用特性為應用程序提供多個版本