• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • C# 程序員參考--條件方法教程

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    C# 程序員 參考--條件方法教程: 本教程演示條件方法,它們提供一種功能強大的機制,通過它可以根據是否定義了預處理器符號來包括或省略方法調用。 示例文件 請參見“條件方法”示例以下載和生成本教程中討論的示例文件。 教程 條件方法使 開發 人員能夠創建
    C# 程序員參考--條件方法教程:

    本教程演示條件方法,它們提供一種功能強大的機制,通過它可以根據是否定義了預處理器符號來包括或省略方法調用。

    示例文件

    請參見“條件方法”示例以下載和生成本教程中討論的示例文件。

    教程

    條件方法使開發人員能夠創建這樣的方法,可將對這些方法的調用放在代碼中,然后編譯期間根據預處理符號包括或省略這些調用。

    假定您想在調試版本中啟用某些斷言代碼,而在發布版本中禁用它們。在 C++ 中,有不止一種方法可以將此功能包含到您的代碼中,例如:

    • 使用 #ifdef 同時定義宏的調試版本和發布版本。調試版本調用跟蹤代碼,而發布版本不執行任何操作。由于 C# 不支持宏,該方法行不通。
    • 具有正在被調用的代碼的兩個實現。即,在調試版本中,具有完全功能;而在發布版本中,具有方法的空存根 (stub)。然后,用戶在鏈接項目時選擇包括哪一個實現。該方法的問題是,發布版本包含對空方法的調用,并且配置較復雜。

    C# 條件方法為該問題提供了簡單的解決方案,類似于上面列出的第一種方法。該操作有兩個基本機制:

    • 直接在源代碼中用 #define 定義預處理標識符。
    • 通過 /define 選項 (/d) 在 C# 命令行上定義預處理標識符。下面的示例中使用該方法。

    條件方法用于“.NET Framework”中。System.Diagnostics 命名空間包含許多支持應用程序中的跟蹤和調試的類。使用 System.Diagnostics.TraceSystem.Diagnostics.Debug 類向應用程序添加復雜的跟蹤和調試(使用條件方法可從發布版本編譯掉的功能)。

    下面的示例展示如何使用條件方法實現非常簡單的跟蹤機制。System.Diagnostics.Trace 提供的跟蹤機制復雜得多,但它使用下面的基本機制提供該功能。

    示例

    本示例由兩個源文件組成:第一個文件是提供跟蹤機制的庫,第二個文件是使用該庫的客戶程序。

    文件 #1:創建條件方法

    下面的代碼展示了一個簡單的庫,它提供向系統控制臺顯示跟蹤消息的跟蹤機制??蛻艨梢詫⒏櫿{用嵌入代碼,然后可以通過在自己的編譯階段中定義符號來控制是否調用跟蹤。

    // CondMethod.cs// compile with: /target:library /d:DEBUGusing System; using System.Diagnostics;namespace TraceFunctions {   public class Trace    {        [Conditional("DEBUG")]        public static void Message(string traceMessage)        {            Console.WriteLine("[TRACE] - " + traceMessage);        }    } }

    代碼討論

    下面的代碼行:

    [Conditional("DEBUG")] 

    Message 方法標記為條件方法(通過 Conditional 屬性)。Conditional 屬性采用一個參數(預處理標識符),該標識符控制編譯客戶代碼時是否包括方法調用。如果定義了預處理標識符,則調用方法;否則從不將調用插入客戶代碼。

    關于哪些方法可以標記為條件方法存在一些限制;有關更多信息,請參見“C# 語言規范”中的 17.4.2 Conditional 屬性。

    文件 #2:使用條件方法

    下面的客戶程序使用文件 #1 中定義的 Trace 類來執行一些簡單跟蹤。

    // TraceTest.cs// compile with: /reference:CondMethod.dll// arguments: A B Cusing System; using TraceFunctions; public class TraceClient {   public static void Main(string[] args)    {       Trace.Message("Main Starting");          if (args.Length == 0)       {           Console.WriteLine("No arguments have been passed");       }       else       {           for( int i=0; i < args.Length; i++)              {               Console.WriteLine("Arg[{0}] is [{1}]",i,args[i]);           }       }        Trace.Message("Main Ending");    } }

    代碼討論

    編譯客戶代碼時,根據是否定義了預處理標識符來決定在客戶代碼中是否包含條件代碼。

    用 /d:DEBUG 標志編譯客戶代碼意味著編譯器插入對 Trace 方法的調用。如果未定義該符號,則從不調用。

    運行示例

    命令為:

    tracetest A B C

    給出以下輸出:

    [TRACE] - Main StartingArg[0] is [A]Arg[1] is [B]Arg[2] is [C][TRACE] - Main Ending

    命令為:

    tracetest

    給出以下輸出:

    [TRACE] - Main StartingNo arguments have been passed[TRACE] - Main Ending

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>