您的位置:首页 > 编程语言 > C#

c# 条件编译(一)

2014-04-01 10:56 253 查看
注:在了解这部分之前,我也问了一部分人,都一致认为目前基本在c#不会用到这个。这块比如说在原来电脑内存比较小,而且有跨平台等操作这个比较多。

1:条件编译

条件编译属于编译预处理的范畴,与c++不同,c#没有独立的预处理器。C#中的预处理指令仅仅用来与c保持一致,而不是编译器开始编译代码之前得一个单独的处理步骤,他是作为词法分析的一部分来执行的。

Msdn关于条件编译的说明:

可以使用条件编译选择特定的代码节进行编译,而排除其他代码节。例如,可能需要编写调试语句来比较同一编程任务的不同方法的速度,或者可能需要本地化用于多种语言的应用程序。条件编译语句被设计为在编译时(而不是在运行时)运行。

2:条件编译指令

条件编译指令有以下四种:#if、#elif、#else、#endif

这些条件编译指令用来有条件的将部分程序段包括进来或排除在外。他们和c#中的if语句有类似的作用。

条件编译符号有两种可能的状态:已定义的或未定义的。在源文件词法处理开始时,条件编译符号除非已由外部机制(如命令行编译器选项)显式定义,否则是未定义的。
#define A //定义a

#undef A //取消a的定义


他们在程序中的出现的先后顺序必须是这样:

一条#if语句(必须有)

零或多条#elif语句

零或一条#else语句

一条#endif语句(必须有)

#if (Debug && !Mytest)

Console.WriteLine("Debug is defined");

#elif (!Debug && Mytest)

Console.WriteLine("Mytest is defined");

#elif (Debug && Mytest)

Console.WriteLine("Debug and Mytest are defined");

#else

Console.WriteLine("Debug and Mytest are not defined");

console.ReadLine();

#endif

3:Conditional

当调用标记为条件的方法时,指定的预处理符号的存在或不存在决定是否包含或省略此调用。如果定义了该符号,则包含调用;否则省略调用。使用 Conditional 是封闭 #if 和 #endif 内部方法的替代方法

classDebug

{

staticvoidMain(string[] args)

{

Print1();

Print2();

Print3();

Console.ReadLine();

}

[Conditional("DEBUG")]

staticvoid Print1()

{

Console.WriteLine("1111111111111111111111111111");

}

//定义了debug或者trace后才执行

//或者的关系

[Conditional("DEBUG"), Conditional("Trace")]

staticvoid Print2()

{

Console.WriteLine("222222222222222222222222");

}

//只有定义了Debug和Trace后才会执行此方法

[Conditional("DEBUGAndTrace")]

staticvoid Print3()

{

Console.WriteLine("33333333333333333333333333333333");

}

}

PS:

预处理指令如果出现在其它输出输出元素中间就不会被执行,如果出现在console.writeline("
#if Debug
world
#else
everyone
#endif

");//当做字符串输出,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: