一个尝试错误的人生,不但比无所事事的人生更荣耀,并且更有意义。
目录
一、预处理器指令
1. 特点
- 预处理器指令指导编译器在实际编译开始之前对信息进行预处理。
- 预处理器指令都是以 # 开始,只有空白字符可以出现在预处理器指令之前。
- 预处理器指令不是语句,结尾没有分号(;)。
- C# 编译器没有一个单独的预处理器,但指令被处理时就像是有一个单独的预处理器一样。
- 一个预处理器指令必须是该行上的唯一指令。
2. 预处理器指令
- #define 用于定义一系列成为符号的字符 该指令创建符号常量。 语法:
#define PI //在关键字using的前面
- #undef 用于取消定义符号
- #if 用于测试符号是否为真 该指令创建一个条件指令,用于测试符号是否为真,如果为真,编译器会执行 #if 和下一个指令之间的代码。
#if (symbol1 == symbol2)
- #else 用于创建复合条件指令,与 #if 一起使用
- #elif 用于创建复合条件指令
- #endif 指定一个条件指令的结束 一个以 #if 指令开始的条件指令,必须显示地以一个 #endif 指令终止。 例:
#define symbol1 #define symbol2 using System; namespace HelloWorldApplication { class HelloWorld { static void Main(string[] args) { #if (symbol1 == symbol2) Console.WriteLine("symbol1 and symbol2 are defined!"); #else Console.WriteLine("symbol1 and symbol2 are not defined!"); #endif Console.ReadKey(); } } } 结果: symbol1 and symbol2 are defined!
- #error 允许从代码的指定位置生成一个错误 如果编译器遇到 #error 指令,就会给用户显示后面的文本,作为一条编译错误消息,然后会立即退出编译。
- #warning 允许从代码的指定位置生成一级警告 如果编译器遇到 #warning 指令,会给用户显示 #warning 指令后面的文本,之后编译继续进行。
- #region 在使用 Visual Studio Code Editor 的大纲特性时,指定一个可展开或折叠的代码块
- #endregion 标识着 #region 块的结束
- #line 可以修改编译器的行数以及(可选地)输出错误和警告的文件名
二、异常处理
异常是在程序执行期间出现的问题。异常处理对可能出现的问题进行处理以及清理资源。
1. 关键字
- try try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。
- catch 程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。
- finally 用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文 件,不管是否出现异常文件都要被关闭。
- throw 当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。 如果异常是直接或间接派生自 System.Exception 类,可以直接抛出一个对象。
catch(Exception e) { ....... throw e }
2. 语法
try //try块后可跟多个catch块
{
//引起异常的语句
}
catch( ExceptionName e1 )
{
// 错误处理代码
}
catch( ExceptionName e2 )
{
// 错误处理代码
}
finally
{
// 要执行的语句
}
try/catch 块内的代码为受保护的代码。
3. 异常类
C# 异常是使用类来表示的。
System.SystemException 类是所有预定义的系统异常的基类。
预定义的系统异常类:
- System.IO.IOException 处理 I/O 错误。
- System.IndexOutOfRangeException 处理当方法指向超出范围的数组索引时生成的错误。
- System.ArrayTypeMismatchException 处理当数组类型不匹配时生成的错误。
- System.NullReferenceException 处理当依从一个空对象时生成的错误。
- System.DivideByZeroException 处理当除以零时生成的错误。
- System.InvalidCastException 处理在类型转换期间生成的错误。
- System.OutOfMemoryException 处理空闲内存不足生成的错误。
- System.StackOverflowException 处理栈溢出生成的错误。