自定义异常和基础构造函数

Mas*_*ius 3 c# exception base custom-exceptions

我一直在尝试编写自己的自定义构造函数,但是获取有关base()构造函数的错误.我一直在寻找如何解决这个错误,但没有发现任何内容,互联网上的所有示例都显示与我的几乎相同的代码.

Whole Exception.cs内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace RegisService
{
public class Exceptions : Exception
{        
}

  public class ProccessIsNotStarted : Exceptions
  {
      ProccessIsNotStarted()
          : base()
      {
          //var message = "Formavimo procesas nestartuotas";
          //base(message);
      }

      ProccessIsNotStarted(string message) 
          : base(message) {}

      ProccessIsNotStarted(string message, Exception e)
          : base(message, e) {}
  }
}
Run Code Online (Sandbox Code Playgroud)

第一次重载base()正在工作,没有抛出任何错误.第二次和第三次重载告诉我:

"RegisService.Exceptions不包含带有1(2)个参数的构造函数"

我试图解决错误的另一种方法:

ProccessIsNotStarted(string message)              
    {
        base(message);
    }

    ProccessIsNotStarted(string message, Exception e)
    {
        base(message, e);
    }
Run Code Online (Sandbox Code Playgroud)

这一次,VS告诉我:

"使用关键字'base'在此上下文中无效"

那么,问题出在哪里?看起来base()构造函数有一些奇怪的重载或我以不恰当的方式调用它?

Car*_*ten 6

您的Exceptions类需要定义您想要提供的所有构造函数.构造函数System.Exception不是虚拟的或抽象的.关键字base不会调用所有基类的成员,而是调用您在类声明中提供的一个基类.看看这个:

public class Exceptions : Exception
{
    public Exceptions(string message)
        : base(message) {}
}

public class ProccessIsNotStarted : Exceptions
{
    public ProccessIsNotStarted()
        : base()
    {
    }

    public ProccessIsNotStarted(string message) 
        : base(message)
    {
        // This will work, because Exceptions defines a constructor accepting a string.
    }

    public ProccessIsNotStarted(string message, Exception e)
        : base(message, e) 
    {
        // This will not work, because Exceptions does not define a constructor with (string, Exception).
    }
}
Run Code Online (Sandbox Code Playgroud)

默认情况下定义无参数构造函数.要隐藏它,你需要声明它private.

关于MSDN,您应该保持异常继承层次结构:

如果您正在设计需要创建自己的异常的应用程序,建议您从Exception类派生自定义异常.最初认为自定义异常应该来自ApplicationException类; 然而,在实践中,尚未发现这增加了重要价值.

您也可以查看此页面.