如何在C#中编写用户自定义异常?

5

你好,有人能告诉我如何在C#中编写自定义异常吗?和Java一样,C#也可以编写吗?

2个回答

16

您想继承自System.Exception,并且最好提供(至少)与基类构造函数相同的公共构造函数,并将参数传递给基类构造函数。添加您认为适合您特定需求的相关属性和/或方法。

public class MyException : System.Exception
{
     public MyException() : base() { }
     public MyException(string message) : base(message) { }
     public MyException(string message, Exception innerException) : base(message, innerException) { }
} 

根据.NET Framework设计准则,除非你有一个非常好的理由选择其他东西,否则你应该直接从Exception继承。 - Jonathan Allen
@Jonathan:所有系统已恢复正常。删除了我愚蠢的回答并移除了无用的评论。以SO精神之名点赞该回答。感谢您的纠正。 - this. __curious_geek

11
几乎与Java相同-您需要扩展Exception类。在最基本的形式中。
public class CustomException : System.Exception
{
  public CustomException()
  {
  }

  public CustomException(string message)
    : base(message)
  {
  }

  public CustomException(string message, System.Exception innerException)
    : base(message, innerException)
  {
  }
}

然后,使用字段或属性添加要捕获的数据。

在回答这个问题之前,我查看了 Microsoft Design Guildlines 上关于自定义异常的内容。设计自定义异常(MSDN)

  1. 避免深层次的命名空间层级结构。
  2. 如果可能的话,从提供的常见基本异常中派生,例如ArgumentException。 但是不要ApplicationException派生。派生它没有任何意义,也不会有害。关于ApplicationException的MSDN博客文章
  3. 使用“Exception”后缀。
  4. 通过实现ISerializable接口使异常可序列化。显然,异常必须是可序列化的,才能正确地跨应用程序域和远程边界工作。
  5. 将安全敏感信息存储在私有异常状态中,添加SecurityPermission属性以确保只有受信任的代码可以获取信息。

强烈建议阅读MSDN上的设计指南


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接