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

首頁 > 編程 > C# > 正文

C# #define條件編譯詳解

2020-01-24 00:51:31
字體:
來源:轉載
供稿:網友

本文導讀:

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();    }  }}

輸出結果如下:

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

方式二、使用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");    }  }}

輸出結果如下:

說明:

1、代碼中沒有定義DEBUG,卻輸出了DEBUG,是因為DEBUG版本,自動定義了DEBUG?!绊椖卡D―右鍵――屬性――生成選項卡――常規欄”下的定義 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)。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国语对白做受69| 欧美在线观看网址综合| 国产裸体写真av一区二区| 国产一区二区香蕉| 国产日韩视频在线观看| 国产精品91在线| 国产视频观看一区| 国产精品白嫩美女在线观看| 亚洲国产精品美女| 日韩精品在线私人| 欧美成人免费播放| 国产成人一区二区三区电影| 日本精品视频在线播放| 亚洲午夜精品视频| 欧美大片欧美激情性色a∨久久| 国产一区二区三区四区福利| 91亚洲精品久久久久久久久久久久| 欧美成人午夜免费视在线看片| 日韩av在线免费观看一区| 久久视频免费观看| 69视频在线免费观看| 久久精品99久久香蕉国产色戒| 国产精品劲爆视频| 国产在线视频一区| 亚洲一区二区中文| 亚洲成人精品av| 成人国产精品日本在线| 国产精品xxx视频| 欧美猛少妇色xxxxx| 亚洲天堂成人在线| 亚洲人成电影网站色| 久久五月天综合| 国产婷婷成人久久av免费高清| 日韩电影免费观看在线| 国产精品久久久久一区二区| 成人精品久久av网站| 久久理论片午夜琪琪电影网| 国产a级全部精品| 欧美丝袜一区二区三区| 欧美日韩美女在线| 国产一区私人高清影院| 91成人免费观看网站| 亚洲成av人片在线观看香蕉| 亚洲日本中文字幕免费在线不卡| 日本韩国在线不卡| 日韩一区二区精品视频| 亚洲天堂网站在线观看视频| 亚洲国产天堂网精品网站| 蜜臀久久99精品久久久无需会员| 欧美丝袜第一区| 国产69精品久久久久99| 亚洲wwwav| 亚洲精品国产综合区久久久久久久| 中文字幕日韩精品在线观看| 亚洲福利视频在线| 亚洲精品电影久久久| 国外日韩电影在线观看| 成人精品视频在线| 日本国产高清不卡| 黄色精品在线看| 欧美丰满老妇厨房牲生活| 亚洲男女性事视频| 热久久免费国产视频| 久久久久久这里只有精品| 欧美在线不卡区| 欧美性xxxxhd| 日本人成精品视频在线| 欧美在线亚洲在线| 成人黄色短视频在线观看| 亚洲精品国精品久久99热| 九九热精品视频国产| 亚洲欧美精品伊人久久| 日韩欧美中文第一页| 国产精品视频自拍| 日韩中文第一页| 欧美日韩在线观看视频小说| 亚洲天堂男人天堂女人天堂| 69久久夜色精品国产7777| 久久久久久久国产精品| 午夜精品福利在线观看| 一区二区三区四区在线观看视频| 久久精品亚洲热| 亚洲国产精品成人精品| 国产欧亚日韩视频| 成人性教育视频在线观看| 在线观看免费高清视频97| 日本a级片电影一区二区| 国产精品成人国产乱一区| 国产91精品不卡视频| 亚洲字幕在线观看| 亚洲天堂2020| 亚洲视频在线播放| 97超级碰在线看视频免费在线看| 91在线观看免费网站| 亚洲欧美国产精品专区久久| 久久久久国产视频| 欧美一级高清免费播放| 懂色av中文一区二区三区天美| 亚洲精品网站在线播放gif| 91网在线免费观看| 国产美女扒开尿口久久久| 这里只有精品丝袜| 国产精品视频内| 538国产精品一区二区免费视频| 欧美性在线视频| 97国产精品人人爽人人做| 欧美高清一级大片| 日韩精品视频在线| 精品亚洲va在线va天堂资源站| 91丝袜美腿美女视频网站| 一区二区三区动漫| 国产91九色视频| 日韩一级裸体免费视频| 欧美一区二区色| 亚洲热线99精品视频| 欧美与欧洲交xxxx免费观看| 久久久久久久久网站| 欧美激情精品久久久| 久久国产精品影片| 国产精品久久久久久五月尺| 国产精品手机播放| 国内精品美女av在线播放| 亚洲国产精品一区二区三区| 欧美日韩激情视频8区| 欧美日韩视频免费播放| 国产ts一区二区| 国产97色在线| 欧美日韩一区二区三区| 国内精品视频久久| 97高清免费视频| 久久久电影免费观看完整版| 国产精品久久9| 91久久精品国产91性色| 亚洲一区免费网站| 中文字幕精品—区二区| 亚洲综合第一页| 91豆花精品一区| 91大神福利视频在线| 18一19gay欧美视频网站| 亚洲3p在线观看| 久久69精品久久久久久国产越南| 中文字幕欧美亚洲| 精品国产91久久久久久| 97国产真实伦对白精彩视频8| 日韩av免费在线看| www.久久撸.com| 国产精品国产三级国产aⅴ浪潮| 中文字幕日韩欧美在线视频| 国产噜噜噜噜噜久久久久久久久| 日韩电影网在线| 精品国产91久久久久久老师| 九九热这里只有精品免费看| 亚洲美女精品久久| 亚洲国产精久久久久久| 揄拍成人国产精品视频| 国产精品视频精品| 日韩av免费看网站| 中文字幕欧美亚洲| 色婷婷av一区二区三区在线观看| 欧美精品免费在线| 国产午夜一区二区| 国语自产精品视频在免费| 国产精品91免费在线| 亚洲va码欧洲m码|