亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# #define條件編譯詳解

2019-10-29 21:16:12
字體:
來源:轉載
供稿:網友

本文導讀:

C#的預處理器指令從來不會轉化為可執行代碼的命令,但是會影響編譯過程的各個方面,常用的預處理器指令有#define、#undef、#if,#elif,#else和#endif等等,下面介紹C#中使用#define進行條件編譯的實例。

C#中條件編譯指令用于按條件包含或排除源文件中的某些部分。在Visual Studio中,會看到被排除的代碼顯示為灰色。

一、#define可以用來做什么

1、當計劃發布兩個版本的代碼的時候。即基本版和擁有更多版本的企業版,就可以用到條件編譯指令;

2、例如同一個文件給silverlight、wpf、winform等使用,并且還考慮Debug和Release等,有大部分代碼是一樣的;

3、指定函數和屬性是否編譯到最終產品中去。

二、#define用法

語法:#define 名稱

注意:這里名稱取Debug,你也可以取其他名稱如Dragon

#define Debug

說明:

1、Debug可以看做是聲明的一個變量,但此變量沒有真正的值,存在時#if Debug結果為true,否則為false;

2、#define單獨用沒什么意義,一般是和#if或者Conditional特性結合使用;

3、#define必須定義在所有using命名空間前面;

4、Debug與DEBUG是不同的,C#區分大小寫。

三、#define條件編譯實例

方式一、使用#if

#define Dragonusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;namespace ConditionalCompilation{  class Program  {    static void Main(string[] args)    {#if Dragon      Console.WriteLine("Dragon is defined");#else      Console.WriteLine("Dragon is not defined");#endif      Console.ReadKey();    }  }}

輸出結果如下:

C#,#define,條件編譯

如果注釋掉 //#define Dragon ,輸出結果為:

C#,#define,條件編譯

方式二、使用Conditional特性

我們可以將一些函數隔離出來,使得它們只有在定義了某些環境變量或者設置了某個值之后才能發揮作用,使用Conditional特性的隔離策略要比#if/#endif不容易出錯。

#define Debug#define Trace#if (Debug && Trace)#define DebugAndTrace#endifusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;namespace ConditionalCompilation{  class Program  {    static void Main(string[] args)    {      Print0();      Print1();      Print2();      Print3();      Console.ReadKey();    }    [Conditional("DEBUG")]    static void Print0()    {      Console.WriteLine("DEBUG is defined");    }    [Conditional("Debug")]    static void Print1()    {      Console.WriteLine("Debug is defined");    }    //定義了Debug或者Trace后才會執行此方法    //或者的關系    [Conditional("Debug"), Conditional("Trace")]    static void Print2()    {      Console.WriteLine("Debug or Trace is defined");    }    //只有定義了Debug和Trace后才會執行此方法    //并且的關系    [Conditional("DebugAndTrace")]    static void Print3()    {      Console.WriteLine("Debug and Trace is defined");    }  }}

輸出結果如下:

C#,#define,條件編譯

說明:

1、代碼中沒有定義DEBUG,卻輸出了DEBUG,是因為DEBUG版本,自動定義了DEBUG。“項目——右鍵——屬性——生成選項卡——常規欄”下的定義 DEBUG 常量(U)前面的復選框被選中。當然你可以去掉其選中狀態,這樣就不會輸出DEBUG了。

2、如果Debug和Trace均沒有定義,則不會輸出Debug or Trace;只有Debug和Trace均定義了,才會輸出Debug and Trace。

3、可以給Conditional增加多個屬性如示例代碼 [Conditional("Debug"), Conditional("Trace")] ,不過多個屬性之間的關系是或的關系,即“Debug”或者“Trace”任意一個被定義了,那么對應方法就會被執行。

4、如果需要增加多個與的屬性,直接用Conditional是無法實現的,需要借助#if/#endif間接來完成,如示例代碼中的組合操作

#if (Debug && Trace)#define DebugAndTrace#endif

使用Conditional屬性的方法受到以下限制:

1、條件方法必須是類聲明或結構聲明中的方法。如果在接口聲明中的方法上指定Conditional屬性,將出現編譯時錯誤;

2、條件方法不能是接口方法的實現。否則將發生編譯時錯誤;

3、條件方法必須具有void返回類型;

4、不能用override修飾符標記條件方法。但是,可以用virtual修飾符標記條件方法。此類方法的重寫方法隱含為有條件的方法,而且不能用Conditional屬性顯式標記。

環境變量(或條件編譯符號)的設置方法有三:

1)用#define定義以及#undef取消定義,在所有using命名空間前面定義;

2)用編譯器命令行選項(例如,/define:DEBUG),在“項目——右鍵——屬性——生成選項卡——常規欄”下的條件編譯符號(Y)中設置(如果多個,可以用英文逗號隔開)。DEBUG版本下,系統默認設置了DEBUG和TRACE;

3)用操作系統外殼程序中的環境變量(例如,set DEBUG=1)。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲女人天堂视频| 国内免费久久久久久久久久久| 这里只有视频精品| 欧美性猛交xxxx黑人| 911国产网站尤物在线观看| 全球成人中文在线| 欧美xxxwww| 成人免费自拍视频| 欧美片一区二区三区| 成人国产精品色哟哟| 色无极亚洲影院| 欧美小视频在线| 国产精品久久久亚洲| 奇米成人av国产一区二区三区| 欧美日韩国产成人高清视频| 亚洲电影成人av99爱色| 成人欧美一区二区三区黑人孕妇| 精品久久国产精品| 久久九九有精品国产23| 国产精品直播网红| 国产亚洲欧美aaaa| 亚洲成人精品久久久| 中文字幕久热精品在线视频| 九九精品在线视频| 日韩中文字幕视频在线观看| 伊人久久久久久久久久久| 欧美日韩美女视频| 日本一欧美一欧美一亚洲视频| 色老头一区二区三区在线观看| 日本成人激情视频| 国产精品老女人视频| 91亚洲精品在线| 精品福利在线观看| 欧美在线播放视频| 92国产精品视频| 高清欧美性猛交| 国产精品视频最多的网站| 欧美日韩另类视频| 日韩成人免费视频| 欧洲日本亚洲国产区| 精品呦交小u女在线| 国产激情综合五月久久| 中文字幕亚洲第一| 91视频免费网站| 久久国内精品一国内精品| 欧美成人免费全部观看天天性色| 国产成人精品久久二区二区91| 国产精品成人aaaaa网站| 欧美日韩午夜剧场| 伊人久久久久久久久久久久久| 欧美整片在线观看| 国产亚洲成av人片在线观看桃| 午夜精品国产精品大乳美女| 国产拍精品一二三| 久久视频免费在线播放| 亚洲女人被黑人巨大进入al| 欧美日韩精品在线视频| 亚洲色图25p| 91精品啪aⅴ在线观看国产| 911国产网站尤物在线观看| 亚洲影影院av| 亚洲另类欧美自拍| 成人免费看吃奶视频网站| 情事1991在线| 国产精品入口夜色视频大尺度| 日韩亚洲欧美中文高清在线| 性欧美xxxx视频在线观看| 国产精品久久久久久久久借妻| 久久国产精品免费视频| 国产精品久久久久久久久久小说| 5278欧美一区二区三区| 国产精品普通话| 国产亚洲a∨片在线观看| 国产精欧美一区二区三区| 亚洲欧美一区二区三区久久| 亚洲精美色品网站| 亚洲精品wwwww| 国产成人涩涩涩视频在线观看| 亚洲性视频网址| 成人网欧美在线视频| 日韩精品在线视频美女| 成人免费视频在线观看超级碰| 欧美在线观看网址综合| 日韩网站免费观看| 欧美精品久久久久| 欧美成人免费一级人片100| 色综合久久精品亚洲国产| 88国产精品欧美一区二区三区| 精品国产依人香蕉在线精品| 日韩美女在线观看| 亚洲欧美国产另类| 亚洲精品国偷自产在线99热| 国产精品女人久久久久久| 国产精品久久久999| 国内精品小视频在线观看| 日韩亚洲欧美中文高清在线| 亚洲精品日韩av| 少妇久久久久久| 9.1国产丝袜在线观看| 精品国产乱码久久久久久婷婷| 98午夜经典影视| 欧美大片欧美激情性色a∨久久| 日韩成人av网| 91久久国产婷婷一区二区| 日韩视频在线免费| 亚洲免费视频一区二区| www欧美日韩| 国产精品色午夜在线观看| 日韩在线免费高清视频| 亚洲综合色av| 色七七影院综合| 91热精品视频| 亚洲精品一区二三区不卡| 欧美激情2020午夜免费观看| 国产精品美女视频网站| 久久久精品在线观看| 国产视频一区在线| 亚洲国产精品电影| 欧亚精品在线观看| 国产91成人在在线播放| 欧美激情免费看| 国产成人高清激情视频在线观看| 久久天天躁狠狠躁夜夜躁| 色妞一区二区三区| 久久成人免费视频| 69av视频在线播放| 日韩在线视频二区| 国产精品久久二区| 久久男人的天堂| 欧美猛交ⅹxxx乱大交视频| 538国产精品一区二区免费视频| 亚洲午夜精品久久久久久性色| 欧美视频在线观看免费网址| 欧美一级高清免费播放| 国产精品69久久久久| 亚洲男人天堂古典| 日韩大片免费观看视频播放| 久久久久久久久久亚洲| 精品久久久久人成| 亚洲福利视频二区| 精品亚洲aⅴ在线观看| 国产日韩在线一区| 91网站在线免费观看| 国产综合视频在线观看| 久久99热精品这里久久精品| 欧美日韩国产综合视频在线观看中文| 久久久久久久久久亚洲| 亚洲新声在线观看| 午夜精品美女自拍福到在线| 91豆花精品一区| 亚洲精品欧美日韩| 国产一区二中文字幕在线看| 伊人伊成久久人综合网站| 久久久久久中文| 亚洲午夜色婷婷在线| 少妇av一区二区三区| 插插插亚洲综合网| 成人国产在线激情| 亚洲精品国产精品乱码不99按摩| 亚洲精品成人久久电影| 成人免费网站在线| 黑人巨大精品欧美一区二区一视频| 亚洲免费视频在线观看| 日韩国产一区三区|