目录
一、预处理器指令
C# 预处理器指令列表
预处理器指令
|
描述
|
#define
|
它用于定义一系列成为符号的字符。
|
#undef
|
它用于取消定义符号。
|
#if
|
它用于测试符号是否为真。
|
#else
|
它用于创建复合条件指令,与 #if 一起使用。
|
#elif
|
它用于创建复合条件指令。
|
#endif
|
指定一个条件指令的结束。
|
#line
|
它可以让您修改编译器的行数以及(可选地)输出错误和警告的文件名。
|
#error
|
它允许从代码的指定位置生成一个错误。
|
#warning
|
它允许从代码的指定位置生成一级警告。
|
#region
|
它可以让您在使用 Visual Studio Code Editor 的大纲特性时,指定一个可展开或折叠的代码块。
|
#endregion
|
它标识着 #region 块的结束。
|
#define PI
using System;namespace PreprocessorDAppl{
class Program
{
static void Main(string[] args)
{
#if (PI)
Console.WriteLine("PI is defined"); //PI不存在,则这条语句不编译
#else
Console.WriteLine("PI is not defined"); //PI存在,则这条语句不编译
#endif
Console.ReadKey();
}
}}
其他预处理器指令:
1.#warning 和 #error:
当编译器遇到它们时,会分别产生警告或错误。如果编译器遇到 #warning 指令,会给用户显示 #warning 指令后面的文本,之后编译继续进行。如果编译器遇到 #error 指令,就会给用户显示后面的文本,作为一条编译错误消息,然后会立即退出编译。使用这两条指令可以检查 #define 语句是不是做错了什么事,使用 #warning 语句可以提醒自己执行某个操作。
#if DEBUG && RELEASE #error "You've defined DEBUG and RELEASE simultaneously!"
#endif
#warning "Don't forget to remove this line before the boss tests the code!"
Console.WriteLine("*I hate this job.*");
2. #region 和 #endregion
#region 和 #endregion 指令用于把一段代码标记为有给定名称的一个块,如下所示:
#region Member Field Declarationsint x;double d;Currency balance;#endregion
这看起来似乎没有什么用,它不影响编译过程。这些指令的优点是它们可以被某些编辑器识别,包括 Visual Studio .NET 编辑器。这些编辑器可以使用这些指令使代码在屏幕上更好地布局。
3. #line
#line 指令可以用于改变编译器在警告和错误信息中显示的文件名和行号信息,不常用。
如果编写代码时,在把代码发送给编译器前,要使用某些软件包改变输入的代码,就可以使用这个指令,因为这意味着编译器报告的行号或文件名与文件中的行号或编辑的文件名不匹配。#line指令可以用于还原这种匹配。也可以使用语法#line default把行号还原为默认的行号:
#line 164 "Core.cs" // 在文件的第 164 行// Core.cs, before the intermediate// package mangles it.// later on#line default // 恢复默认行号
4. #pragma
#pragma 指令可以抑制或还原指定的编译警告。与命令行选项不同,#pragma 指令可以在类或方法级别执行,对抑制警告的内容和抑制的时间进行更精细的控制。如下:
#pragma warning disable 169 // 取消编号 169 的警告(字段未使用的警告)public class MyClass{
int neverUsedField; // 编译整个 MyClass 类时不会发出警告
}
#pragma warning restore 169 // 恢复编号 169 的警告
总结:预处理器指令主要是方便我们开发人员进行调试,如用#else搭配来可以不编译部分代码,开发无报错可自定义报错提示等等。
二、命名空间Namespace
1.命名空间
定义命名空间
嵌套命名空间
2.using 关键字
1. using指令:引入命名空间
这是最常见的用法,例如:
using System;using Namespace1.SubNameSpace;
2. using static 指令:指定无需指定类型名称即可访问其静态成员的类型
using static System.Math;
var = PI; // 直接使用System.Math.PI
3. 起别名
using Project = PC.MyCompany.Project;
4. using语句:将实例与代码绑定
using (Font font3 = new Font("Arial", 10.0f),
font4 = new Font("Arial", 10.0f))
{
// Use font3 and font4.
}
代码段结束时,自动调用font3和font4的Dispose方法,释放实例。