赞
踩
超级小白友好,讲解C#基础,每集5分钟轻松学习,拒绝从入门到放弃!
C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。
语法:
try { // 引起异常的语句 } catch( ExceptionName e1 ) { // 错误处理代码 } catch( ExceptionName e2 ) { // 错误处理代码 } catch( ExceptionName eN ) { // 错误处理代码 } finally { // 要执行的语句 }
C# 异常是使用类来表示的。
C# 中的异常类主要是直接或间接地派生于 System.Exception 类。
System.ApplicationException 和 System.SystemException 类是派生于 System.Exception 类的异常类。
System.ApplicationException 类支持由应用程序生成的异常。所以程序员定义的异常都应派生自该类。
System.SystemException 类是所有预定义的系统异常的基类。
派生自 Sytem.SystemException 类的预定义的异常类:
异常类 | 描述 |
---|---|
System.IO.IOException | 处理 I/O 错误。 |
System.IndexOutOfRangeException | 处理当方法指向超出范围的数组索引时生成的错误。 |
System.ArrayTypeMismatchException | 处理当数组类型不匹配时生成的错误。 |
System.NullReferenceException | 处理当依从一个空对象时生成的错误。 |
System.DivideByZeroException | 处理当除以零时生成的错误。 |
System.InvalidCastException | 处理在类型转换期间生成的错误。 |
System.OutOfMemoryException | 处理空闲内存不足生成的错误。 |
System.StackOverflowException | 处理栈溢出生成的错误。 |
C# 以 try 和 catch 块的形式提供了一种结构化的异常处理方案。
使用这些块,把核心程序语句与错误处理语句分离开。
例:除以零时抛出异常
using System; namespace ErrorHandlingApplication { class DivNumbers { int result; DivNumbers() { result = 0; } public void division(int num1, int num2) { try { result = num1 / num2; } catch (DivideByZeroException e) // 把异常的显示放到 e 中 { Console.WriteLine("Exception caught: {0}", e); } finally // 不管是不是出现异常,都要运行以下代码 { Console.WriteLine("Result: {0}", result); } } static void Main(string[] args) { DivNumbers d = new DivNumbers(); d.division(25, 0); Console.ReadKey(); } } }
运行结果:
Exception caught: System.DivideByZeroException: Attempted to divide by zero.
at ... // 显示在代码第几行出了异常
Result: 0
用户自定义的异常类是派生自 ApplicationException 类。
例:
using System; namespace UserDefinedException { class TestTemperature { static void Main(string[] args) { Temperature temp = new Temperature(); try { temp.showTemp(); } catch(TempIsZeroException e) { Console.WriteLine("TempIsZeroException: {0}", e.Message); } Console.ReadKey(); } } } public class TempIsZeroException: ApplicationException // 自定义的异常需要继承自 ApplicationException { public TempIsZeroException(string message): base(message) // 设定抛出的异常提示语句是什么 { } } public class Temperature { int temperature = 0; public void showTemp() { if(temperature == 0) { throw (new TempIsZeroException("Zero Temperature found")); // 判定在温度为 0 的时候抛出一个异常 } else { Console.WriteLine("Temperature: {0}", temperature); // 否则就显示气温数据 } } }
运行结果:
TempIsZeroException: Zero Temperature found
如果异常是直接或间接派生自 System.Exception 类,可以在 catch 块中使用 throw 语句来抛出当前的对象。
语法:
Catch(Exception e)
{
...
Throw e
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。