C#預處理器指令


  C#的預處理器指令很容易識別,你看到了#,就能認出它們。

  它和其他的命令有什么區別呢?

  區別在於這些命令從來不會轉化為可執行代碼的命令,但是會影響編譯過程的各個方面。

  它用來做什么呢?

  當計划發布兩個版本的代碼的時候。即基本版和擁有更多版本的企業版,就可以用到預處理器指令。

  在編譯基本版的時候,使用預處理指令會禁止編譯器編譯與額外功能相關的代碼。

  另外,在編寫提供調試信息的代碼時,也可以使用預處理器指令。

  下面介紹預處理器指令的功能:

  #define和#undef

  #define用法:  #define Debug

  Debug可以看做是聲明的一個變量,但此變量沒有真正的值,僅存在。

  #define單獨用沒什么意義,一般是和#if結合使用。

  #undef用法:   #undef Debug

  作用就是刪除Debug的定義。如果Debug符號不存在,這條指令就沒有任何作用。如果Debug符號存在,則之前的#define就沒有作用。 

  #define與#undef聲明必須放在C#源文件的開頭位置,即程序集的引用的上方。

 

  #if,#elif,#else和#endif

  下面來看一個例子  

View Code
//#define DebugA
#define DebugB
using System;

namespace MyApplication
{
    class Program
    {
        static void Main(string[] args)
        {
#if DebugA
            Console.WriteLine("Hello DebugA");
#elif DebugB
            Console.WriteLine("Hello DebugB");
#else
            Console.WriteLine("Hello Debugelse");
#endif
        }
    }
}

  #elif(=else if)和#else指令可以用在#if中,和C#中的if,else if,else含義相同。

  #if和#elif支持一組邏輯運算符"!","==","!="和"||",如果符號存在,則為true。

  #if DebugB && DebugA  //當Debug與DebugA同時存在才會執行

 

  #warning和#error

  當編譯器遇到這兩條指令時,會分別產生警告和錯誤。如果編譯器遇到#warning指令,會顯示該指令后的文本,之后繼續編譯。

  如果遇見#error指令,也會顯示指令后面的文本。但會立刻退出編譯,不會產生IL代碼。(其實和編譯器的警告和錯誤意義相同) 

View Code
        static void Main(string[] args)
        {
#warning "All Right?"
            Console.WriteLine("Contine...");
//#error "All Right?"
//            Console.WriteLine("Contine...");
        }

  下圖為放開#error注釋:

 

  #region和#endregion

  這兩條指令,大家應該非常熟悉,作用就是代碼縮進和指定該代碼塊的名稱,使得代碼可以更好的布局。詳細用法可以參照報表系列的代碼。

 

  #line

  這條指令很少用到。作用就是:如果代碼在編譯之前,要使用某些軟件包改變輸入的代碼,就可以使用它。

  (其實就是更改代碼的行號)

 

  #pragma warning

  此指令可啟用或禁用某些警告。

  用法:  #pragma warning disable warning-list
            #pragma warning restore warning-list

  例子: 

View Code
using System;

#pragma warning disable 414, 3021
[CLSCompliant(false)]
public class C
{
    int i = 1;
    static void Main()
    {
    }
}
#pragma warning restore 3021
[CLSCompliant(false)]  // CS3021
public class D
{
    int i = 1;
    public static void F()
    {
    }
}

 

  #pragma checksum

  作用是生成源文件的校驗和,以幫助調試 ASP.NET 頁。

   用法:  #pragma checksum "filename" "{guid}" "checksum bytes"

              filename"               要求監視更改或更新的文件的名稱。                               

              "{guid}"                文件的全局唯一標識符 (GUID)。                               

              "checksum_bytes"  十六進制數的字符串,表示校驗和的字節。必須是偶數位的十六進制數。

                                           奇數位的十六進制數字會導致編譯時警告,然后指令被忽略。            

    例子:

View Code
class TestClass
{
    static int Main()
    {
        #pragma checksum "file.cs" "{3673e4ca-6098-4ec1-890f-8fceb2a794a2}" "{012345678AB}" // New checksum
    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM