程序中可能出错的情形很多,如果系统提供地异常类不能够和程序中的异常相匹配,就需要程序员自定义异常类。自定义异常类的语法如下:
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格式输入错误,也不会中断程序运行,而是直接输出错误提示。通过对比这两段代码的结果,可以发现增加异常处理的好处。