异常是不需要的或意外的事件,它在程序执行期间(即,在运行时)发生,它破坏了程序指令的正常流程。有时,在程序执行期间,用户可能会面临程序可能在运行时执行过程中崩溃或显示意外事件的可能性。这个不需要的事件称为Exception,它通常会给出有关代码内某些错误的指示。
示例:要显示除零运算期间异常的发生,如下所示:
// C# program to illustrate the exception
using System;
class Geeks {
// Main Method
static void Main(string[] args)
{
// taking two integer value
int A = 12;
int B = 0;
// divide by zero error
int c = A / B;
Console.Write("Value of C is " + c);
}
}
运行时错误:
Unhandled Exception:
System.DivideByZeroException: Attempted to divide by zero.
at Geeks.Main (System.String[] args) <0x4068cd50 + 0x0000c> in
[ERROR] FATAL UNHANDLED EXCEPTION: System.DivideByZeroException: Attempted to divide by zero.
at Geeks.Main (System.String[] args) <0x4068cd50 + 0x0000c> in
错误与异常之间的区别
错误:
- 错误是计算机程序执行期间可能会出现的意外问题。
- 错误无法处理。
- 所有错误均为例外。
例外情况:
- 异常是在运行时可能发生的意外事件。
- 可以使用try-catch机制处理异常。
- 所有例外都不是错误。
异常层次
在C#中,所有异常都从基类Exception派生而来,该基类被进一步划分为两个分支,分别为ApplicationException和另一个是SystemException 。 SystemException是所有CLR或程序代码生成的错误的基类。 ApplicationException是所有与应用程序相关的异常的基类。所有异常类都直接或间接地从Exception类派生。如果是ApplicationException ,则用户可以创建自己的异常类型和类。但是SystemException包含所有已知的异常类型,例如DivideByZeroException或NullReferenceException等。
不同的异常类:在C#程序中可以生成不同种类的异常:
- 除以零例外:当用户尝试除以零时发生
- 内存不足异常:当程序尝试使用过多的内存时发生
- 索引超出范围异常:访问数组元素或其中不存在的索引。
- Stackoverflow异常:主要是由于无限递归过程引起的
- Null引用异常:当用户尝试引用NULL类型的对象时发生。
…..还有很多。
Exception类的属性: Exception类具有许多属性,可帮助用户在异常期间获取有关异常的信息。
- 数据:此属性有助于获取有关该属性在键值对中保存的任意数据的信息。
- TargetSite:此属性有助于获取将引发异常的方法的名称。
- 消息:此属性有助于提供有关发生异常的主要原因的详细信息。
- HelpLink:此属性有助于保存特定异常的URL。
- StackTrace:此属性有助于提供有关错误发生位置的信息。
- InnerException:此属性有助于提供有关可能发生的一系列异常的信息。