【问题标题】:How to write User Defined exceptions in C#?如何在 C# 中编写用户定义的异常?
【发布时间】:2010-10-04 04:00:02
【问题描述】:

你好,谁能告诉我如何用 C# 编写用户定义的异常?就像我们在 Java 中一样,我们可以用 C# 编写吗?

【问题讨论】:

    标签: c# exception


    【解决方案1】:

    您希望从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:所有系统恢复正常。删除了我愚蠢的答案并删除了我无用的评论。以 SO 精神的名义投票赞成答案。谢谢指正。
    【解决方案2】:

    它实际上与 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 on Custom Exceptions。 Designing Custom Exceptions (MSDN)

    1. 避免使用较深的命名空间层次结构。
    2. 如果可能,从提供的通用基础异常之一派生,即ArgumentException但是不要派生自ApplicationException。它没有害处,这样做是没有意义的。 MSDN Blog Post on ApplicationException
    3. 使用“例外”后缀。
    4. 通过实现ISerializable 接口使异常可序列化。显然,异常必须可序列化才能跨应用程序域和远程边界正常工作。
    5. 将安全敏感信息存储在私有异常状态,添加SecurityPermission属性确保只有受信任的代码才能获取信息。

    强烈推荐阅读 MSDN 上的 Design Guidelines

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      相关资源
      最近更新 更多