C# 預定義語言


官網:

https://msdn.microsoft.com/zh-cn/library/88td0y52.aspx

 

[Conditional("DEBUG")]

 

作為預處理中的一對:#region name ,#endregion可能是大家使用得最多的,我也常用它來進行代碼分塊,在一個比較長的cs文件中,這么做確實是一件可以讓你使代碼更清晰的好辦法,VS也自動用這個來包含自動生成的代碼,它這么做既可以使開發人員更清晰的查看自己的代碼,也開了一個好頭,使更多人使用#region。 
C#中還有好幾對預處理指令,可能大家就用得比較少了。 
#define symbol 
#undef symbol 
#if symbol [operator symbol2]... 
#else 
#elif symbol [operator symbol2] 
#endif 
#warning text text指在編譯器輸出中的警告文字 
#error text  text指在編譯器輸出中的錯誤信息 
#line number [file]

關於#define要說明幾點,#define DEBUG 等效於不寫這句話,你要不定義它才一定要寫上#undefin DEBUG 
 (C# Essentials一書中說 #define DEBUG 等效於#define DEBUG true,不過這個好像有問題)

這一段代碼可以說明好幾個命令: 
#define DEBUG 
#define VC_V6 
using System; 
public class MyClass 

   public static void Main() 
   {

      #if (DEBUG && !VC_V6) 
         Console.WriteLine("DEBUG is defined"); 
      #elif (!DEBUG && VC_V6) 
         Console.WriteLine("VC_V6 is defined"); 
      #elif (DEBUG && VC_V6) 
         Console.WriteLine("DEBUG and VC_V6 are defined"); 
      #else 
         Console.WriteLine("DEBUG and VC_V6 are not defined"); 
      #endif 
   } 

我們可以用這些指令來自動處理測試期和發布期數據庫的連接字符串之類的工作 
#if !RELEASE 
constr = testSQLServerConnectionString 
#else 
constr = releaseSQLServerConnectionString 
#endif 
在編代碼時加上一句#undef RESEASE,發布后刪除這一句就行了。


#define DEBUG

using System;

namespace SyntaxTest 

 public class Class2 
 { 
  public Class2() 
  { 
   #if DEBUG 
          #warning DEBUG is defined 
      #endif 
  } 
 } 

以上代碼會在編譯時產生一個警告。


#define DEBUG

using System;

namespace SyntaxTest 

 public class Class2 
 { 
  public Class2() 
  { 
   #if DEBUG 
          #error DEBUG is defined 
      #endif 
  } 
 } 

以上代碼會在編譯時產生一個錯誤,編譯不通過,所以我們可以利用以上兩種指令進行一些自定義的編譯檢測。 

#line 使您得以修改編譯器的行號以及(可選)錯誤和警告的文件名輸出。

#line [ number ["file_name"] | default ]

number 
要為源代碼文件中后面的行指定的編號。 
"file_name"(可選) 
希望出現在編譯器輸出中的文件名。默認情況下,使用源代碼文件的實際名稱。文件名必須括在雙引號 ("") 中。 
default 
重置文件中的行編號。 
備注 
#line 可能由生成過程中的自動中間步驟使用。例如,如果中間步驟從原始的源代碼文件中移除行,但是您仍希望編譯器基於文件中的原始行號生成輸出,則可以移除行,然后用 #line 模擬原始行號。


public class MyClass2 

   public static void Main() 
   { 
      #line 200 
      int i;   // 這一行在200行,不過在VS中看到的還是6 
      #line default 
      char c;   // 這一行在7行,不過在VS中看到的還是8 
   } 
}

  


免責聲明!

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



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