zoukankan      html  css  js  c++  java
  • 天轰穿C# vs2010 03C#的异常处理之用户自定义异常【原创】

    所谓自定义异常是指我们继承c#中的异常类,如果希望用户能以编程方式区分一些错误条件,您可以创建自己的用户定义的异常。.NET Framework 提供根本上从基类 Exception 派生的异常类的层次结构。这些类中的每一个都定义一个特定的异常,因此在很多情况下只需捕捉该异常。您也可以通过从 Exception 类派生来创建自己的异常类。

    创建自己的异常时,好的编码做法是以“Exception”这个词作为用户定义的异常类名的结尾。

    小提示:关于类和构造函数的知识请参看下一章,而对于本节的内容,您也可以在下一章学完后再回头来学习。

    下面我们做一个实例,从定义自定义异常一直到捕获和处理:

    1.         创建名为“自定义异常”的Windows桌面应用程序项目;

    2.         在解决方案资源管理器中的项目名称上点击右键,添加一名为“MydefineException.cs”的类。

    3.         整个类的代码如下:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

     

    namespace自定义异常

    {

        //在这句前面加上修饰符public,并使该类继承自Exception

        public class MydefineException : Exception

        {

            private string message;// 用作错误消息的私有变量

     

            //添加两个构造函数

            public MydefineException()

            {

                message = "我高兴说你错误,你就错误!"; //为变量message赋值

            }

            public MydefineException(string msg)

                : base(msg)//参考本书后面章节的构造函数重载

            {

                message = msg;  //将传入参数msg的值赋给变量message

            }

            ///<summary>

            ///重写异常错误信息

            ///</summary>

            ///<returns>错误消息</returns>

            public override string ToString()

            {

                return message;

            }

        }

    }

     

     

    4.          在项目中添加名为“UserException.cs”的Windows窗体;在界面上还是一个TextBox一个Button就行了。

    5.          双击Button,在事件编写代码,如下:

            private void button1_Click(object sender, EventArgs e)

            {

                try

                {

                    string txt = textBox1.Text;

                    if (txt == "")

                    {// 如果为空的话,就提示我们自定义的错误

                        throw new MydefineException("我说你错,你就错了");

                        //因为MydefineException类有两个构造函数,所以可以再试试下面这种

                        //throw new MydefineException();

                    }

                    int i = int.Parse(txt);

                    button1.Text = "转换结果为: " + i.ToString();

                }

                catch (MydefineException mex)

                {

                    MessageBox.Show(mex.Message);

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.Message);

                }

            }

     

    6.         运行以看结果。

     

    老田:好了,关于异常处理再最后说一点。只有在哪些可能出错,而代码又无法明确干涉的地方才用异常。前面讲到,因为异常本身还是比较耗费系统效率的。但凡可以预知并处理的错误,还是不要滥用try…catch…finally

     

    本章小结

    本章学习了异常处理的基本的方法——try-catch-finally

    使用一个 Try/Catch 块可以向代码段添加异常处理。使用一个try,我们可以使用多个catch语句来执行。.NET 运行时可以依次处理 catch 块,它将使用找到的第一个匹配块。因此在使用的时候,我们要将子类的catch块放在程序的前端。您可以嵌套 Try 块,以便轻松而有效地推入和弹出异常处理状态。 Try 块后添加一个 Finally 块,这样无论发生什么,都可以无条件运行代码。

    在本章,您学习到:

    1. 异常是程序运行中发生的错误。系统异常派生出两大类:

    ·           一种是系统内建的异常,这些都是系统定义的异常,被称为系统程序异常。

    ·           一种是用户自己定义的异常,被称为应用程序异常。

    2. 异常的产生是通过throwing一个该异常的对象实现的,异常的捕获是通过catch该异常的对象。

    3. 可以使用多个catch来捕获异常

    4. 异常处理的流程

    5. 关键字

    ·           try

    ·           catch

    ·           throwing

    ·           finally

    ·           return

    6. 用户自定义异常

     

    异常及其处理具有以下特点:

    ·         在应用程序遇到异常情况(如被零除情况或内存不足警告)时,就会产生异常。

    ·         在可能引发异常的语句周围使用 try 块。

    ·         try 块中发生异常后,控制流会立即跳转到关联的异常处理程序(如果存在)。

    ·         如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误消息。

    ·         如果 catch 块定义了一个异常变量,则可以使用它来获取有关所发生异常的类型的更多信息。

    ·         可能导致异常的操作通过 try 关键字来执行。

    ·         异常处理程序是在异常发生时执行的代码块。在 C# 中,catch 关键字用于定义异常处理程序。

    ·         程序可以使用 throw 关键字显式地引发异常。

    ·         异常对象包含有关错误的详细信息,比如调用堆栈的状态以及有关错误的文本说明。

    ·         即使引发了异常,finally 块中的代码也会执行,从而使程序可以释放资源。

     

    问题:

    1.       说出五条以上你认为最重要的提高代码可读性的规范来。

    2.       VS中是否可以打N个断点,如果可以,那么打N个断点有什么用?

    3.       VS中遇到断点后直接按F5键有什么后果?

    4.       是否可以一次清除所有断点?那个菜单的那个项?

    5.       try…catch…是否可以嵌套?如果可以请做出示例。

    6.       catch语句块中,是否可以用比如goto等跳转关键字替换return

    7.       如果在catch语句块中执行了return,请问Finally语句块中的代码还能够得到执行吗?

    8.       你认为try…catch…语句最主要应该用在哪些地方?
    本文章为天轰穿原创文章,转载请注明出处及作者。

  • 相关阅读:
    Java基础学习07--内部类与常用类
    Java基础学习06--集合
    leetcode124
    Python深度学习笔记09--使用Keras建立循环神经网络
    Python深度学习笔记08--处理文本数据的常用方法
    详解DNS域名解析系统(域名、域名服务器[根、顶级、授权/权限、本地]、域名解析过程[递归与迭代])
    计算机网络之应用层概述(C/S模型与p2p模型)
    计算机网络传输层之TCP拥塞控制(慢开始与拥塞避免、快重传和快恢复)
    计算机网络传输层之TCP流量控制
    计算机网络传输层之TCP可靠传输
  • 原文地址:https://www.cnblogs.com/thcjp/p/2803208.html
Copyright © 2011-2022 走看看