C#异常处理-自定义异常

程序中可能出错的情形很多,如果系统提供地异常类不能够和程序中的异常相匹配,就需要程序员自定义异常类。自定义异常类的语法如下:

class 自定义异常名:基类异常名

{

//语句块

}

自定义异常时应遵循的编码如下:

将异常类命名为单词“Exception”结尾,如EmailException,UserMessageException。

自定义异常类的代码如下:

ApplicationException //定义异常类派生自基类

public class EmailException:Application

{

public EmaiException(string msg):base(msg)//自定义异常类的构造函数,继承基类异常信息。

{

}

}

自定义异常时,一定要注意出现异常时的提示信息,即异常类的Message属性,一般使用构造函数继承来自基类的Message属性,具体写法如上所示。

下面看一个自定义异常类的使用实例

using System;

public class EmailException

{

public EmailException(string msg): base(msg){}

}

class Program

{

static void Main()

{

Console.WriteLine("请输入Email地址");

string email = Console.ReadLine();

string[]substrings = email.Split('@');

if (substrings.Length != 2)

{

throw new EmailException("email地址错误");

}

else

{

Console.WriteLine("输入正确");

}

}

}

此段代码运行要求输入email地址,如果输入正确,执行else之后的语句,输出“输入正确”的语句;如果输入错误,抛出自定义异常EmailException。

由于在代码中只是直接抛出异常,没有处理异常的语句块。所以程序中断执行,抛出异常。现在我们改写代码,增加异常捕获语句。

using System;

public class EmailException:ApplicationException

{

public EmailException(string msg): base(msg){}

}

class Program

{

static void Main()

{

Console.WriteLine("请输入Email地址");

string email = Console.ReadLine();

string[]substrings = email.Split('@');

try

{

if (substrings.Length != 2)

{

throw new EmailException("email地址错误");

}

else

{

Console.WriteLine("输入正确");

}

}

catch (EmailException ex)

{

Console.WriteLine(ex.Message);

}

}

}

将正常执行的代码放在try块中,如果格式错误,用throw手动抛出异常,在后面添加catch语句捕获异常,进行处理,输出错误提示。调试此程序发现,即使用email格式输入错误,也不会中断程序运行,而是直接输出错误提示。通过对比这两段代码的结果,可以发现增加异常处理的好处。