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()构造函数有一些奇怪的重载或我以不恰当的方式调用它?
您的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类; 然而,在实践中,尚未发现这增加了重要价值.
您也可以查看此页面.