【问题标题】:How do I create a subclass with a constructor that defaults the helplink to google.com?如何使用将帮助链接默认为 google.com 的构造函数创建子类?
【发布时间】:2011-05-01 21:50:51
【问题描述】:

我正在尝试编写代码来创建EpicFailException 类作为ApplicationException 的子类。我必须添加一个将HelpLink 属性默认为google.com 的构造函数。以下是我到目前为止所拥有的。关于如何应用子类有什么建议吗?

 public class ApplicationException : Exception
 {
     public ApplicationException(string auxMessage, Exception inner) :
         base()
     {
         this.HelpLink = "http://google.com";
     }
 }

【问题讨论】:

  • 这是一个 asp.net 应用程序还是?如果发生此异常,您是否要将用户重定向到谷歌...为什么不自己处理...您期待什么史诗般的异常???
  • EpicFailException : ApplicationException ?
  • 如果发生此异常,我想将用户重定向到谷歌。 EpicException 是 ApplicationException 的子类。

标签: c# exception class-design custom-exceptions


【解决方案1】:

.NET 类设计指南已更改; current recommendation is to derive from Exception and not from ApplicationException

也就是说,如果您需要在多个派生异常中设置HelpLink 属性,您可能需要创建一个基类,该基类需要HelpLink 属性的值作为参数,然后派生从此:

public abstract MyExceptionBase : Exception
{
    protected MyExceptionBase(string message, string helpLink) : 
        base(message)
    {
        HelpLink = helpLink;
    }
}

public MyException : MyExceptionBase
{
    public MyException(string message) : 
        base(message, "http://www.google.com")
    { }
}

请注意,您仍应遵循所有其他guidelines for custom exceptions,例如序列化、无参数构造函数等。

【讨论】:

  • 我想编写代码来创建一个 EpicFailException 类作为 ApplicationException 的子类。然后我尝试添加一个构造函数,将 HelpLink 属性默认为“google.com”。
  • @John:以上内容可以满足您的需求,并遵循正确的 .NET 设计准则。有关更多信息,请参阅答案中的链接。
【解决方案2】:

我不确定我是否收到了这个问题,但您可能正在寻找

base(auxMessage,inner)

而不仅仅是

base()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2019-02-25
    • 1970-01-01
    • 2023-01-29
    • 2019-04-30
    • 2021-06-10
    • 1970-01-01
    相关资源
    最近更新 更多