【c#教程】C# 异常处理

C# 异常处理

异常是在程序执行期间出现的问题。c# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。

异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。

try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。

catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。

finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。

throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。

语法

假设一个块将出现异常,一个方法使用 try 和 catch 关键字捕获异常。try/catch 块内的代码为受保护的代码,使用 try/catch 语法如下所示:

try{   // 引起异常的语句}catch( ExceptionName e1 ){   // 错误处理代码}catch( ExceptionName e2 ){   // 错误处理代码}catch( ExceptionName eN ){   // 错误处理代码}finally{   // 要执行的语句}

登录后复制

您可以列出多个 catch 语句捕获不同类型的异常,以防 try 块在不同的情况下生成多个异常。

C# 中的异常类

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 块的形式提供了一种结构化的异常处理方案。使用这些块,把核心程序语句与错误处理语句分离开。

这些错误处理块是使用 try、catch 和 finally 关键字实现的。下面是一个当除以零时抛出异常的实例:

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)            {                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{   public TempIsZeroException(string message): base(message)   {   }}public class Temperature{   int temperature = 0;   public void showTemp()   {      if(temperature == 0)      {         throw (new TempIsZeroException("Zero Temperature found"));      }      else      {         Console.WriteLine("Temperature: {0}", temperature);      }   }}

登录后复制

当上面的代码被编译和执行时,它会产生下列结果:

TempIsZeroException: Zero Temperature found

登录后复制

抛出对象

如果异常是直接或间接派生自 System.Exception 类,您可以抛出一个对象。您可以在 catch 块中使用 throw 语句来抛出当前的对象,如下所示:

Catch(Exception e){   ...   Throw e}

登录后复制

 以上就是【c#教程】C# 异常处理的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2553674.html

(0)
上一篇 2025年3月6日 06:47:36
下一篇 2025年3月6日 06:47:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 【c#教程】C# 正则表达式

    C# 正则表达式 正则表达式 是一种匹配输入文本的模式。.net 框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。 定义正则表达式 下面列出了用于定义正则表达式的各种类别的字符、运算符和结构。 字符转义 字符…

    编程技术 2025年3月6日
    200
  • 【c#教程】C# 预处理器指令

    C# 预处理器指令 预处理器指令指导编译器在实际编译开始之前对信息进行预处理。 所有的预处理器指令都是以 # 开始。且在一行上,只有空白字符可以出现在预处理器指令之前。预处理器指令不是语句,所以它们不以分号(;)结束。 C# 编译器没有一个…

    编程技术 2025年3月6日
    200
  • 【c#教程】C# 命名空间(Namespace)

    C# 命名空间(Namespace) 命名空间的设计目的是为了提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。 定义命名空间 命名空间的定义是以关键字 namespace…

    编程技术 2025年3月6日
    200
  • 【c#教程】C# 接口(Interface)

    C# 接口(Interface) 接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。 接口定义了属性、方法和事件,这些都…

    编程技术 2025年3月6日
    200
  • 【c#教程】C# 运算符重载

    C# 运算符重载 您可以重定义或重载 c# 中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列…

    编程技术 2025年3月6日
    200
  • 【c#教程】C# 多态性

    C# 多态性 多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为”一个接口,多个功能”。 多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的…

    编程技术 2025年3月6日
    200
  • 【c#教程】C# 继承

    C# 继承 继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类来定义一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数…

    编程技术 2025年3月6日
    200
  • 【c#教程】C# 程序结构

    C# 程序结构 在我们学习 c# 编程语言的基础构件块之前,让我们先看一下 c# 的最小的程序结构,以便作为接下来章节的参考。 C# Hello World 实例 一个 C# 程序主要包括以下部分: 命名空间声明(Namespace dec…

    编程技术 2025年3月6日
    200
  • 【c#教程】C# 基本语法

    C# 基本语法 c# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中。 例如,以 Rectangle(矩形)对象为例。它具有 leng…

    编程技术 2025年3月6日
    200
  • 【c#教程】C# 数据类型

    C# 数据类型 在 c# 中,变量分为以下几种类型: 值类型(Value types) 引用类型(Reference types) 指针类型(Pointer types) 值类型(Value types) 值类型变量可以直接分配给一个值。它…

    编程技术 2025年3月6日
    200

发表回复

登录后才能评论