Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-exception类中自动生成的构造函数在visual studio 2015中做什么_C#_Exception_Exception Handling - Fatal编程技术网

C#-exception类中自动生成的构造函数在visual studio 2015中做什么

C#-exception类中自动生成的构造函数在visual studio 2015中做什么,c#,exception,exception-handling,C#,Exception,Exception Handling,所以几天后我会有一个测试,我必须在2天内规划一个项目,之后我的评估师会有机会问我关于我做了什么的问题。我需要在程序中包含异常,我创建了一个自定义异常,并让构造函数自动生成(见下文),但我只使用第二个。现在我可以删除底部的两个,但我认为尝试了解它们的实际用途会更方便 public class CantConnectToDatabaseException : Exception { public CantConnectToDatabaseException() { }

所以几天后我会有一个测试,我必须在2天内规划一个项目,之后我的评估师会有机会问我关于我做了什么的问题。我需要在程序中包含异常,我创建了一个自定义异常,并让构造函数自动生成(见下文),但我只使用第二个。现在我可以删除底部的两个,但我认为尝试了解它们的实际用途会更方便

 public class CantConnectToDatabaseException : Exception
{
    public CantConnectToDatabaseException()
    {
    }

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

    public CantConnectToDatabaseException(string message, Exception innerException) : base(message, innerException)
    {
    }

    protected CantConnectToDatabaseException(SerializationInfo info, StreamingContext context) : base(info, context)
    {
    }
}

如果有人能以我能记住的方式向我解释这一点,并向其他人解释,我将不胜感激,我尝试通过MSDN阅读它,但我无法理解。

只要查看MSDN上的文档,了解您正在调用的构造函数
base()
,例如:

使用指定的错误消息初始化Exception类的新实例

或:

使用指定的错误消息和对导致此异常的内部异常的引用初始化Exception类的新实例

它们用于向要抛出的异常填充有关异常及其周围环境的相关信息


如果你讨厌你的程序员同伴,你只能使用无参数的一个。

只要查看MSDN上的文档,了解你正在使用
base()
调用的构造函数,例如:

使用指定的错误消息初始化Exception类的新实例

或:

使用指定的错误消息和对导致此异常的内部异常的引用初始化Exception类的新实例

它们用于向要抛出的异常填充有关异常及其周围环境的相关信息


如果你讨厌你的程序员同伴,你只能使用无参数的。当你捕获一个异常并重新显示它时,会使用InnerException

举一个有点做作的例子,假设您有一组数据访问方法。各种各样的东西都可能出错,所以你可以这样包装它们:

try
{
    //  stuff
}
catch (Exception ex)
{
    throw new MyDataAccessException("Error accessing data", ex);
}
现在,您的代码可以捕获
MyDataAccessException
以获取由数据访问问题引起的任何异常,但是处理程序可以查看
MyDataAccessException
对象的
InnerException
属性,以准确地找出错误所在以及错误所在

protected CantConnectToDatabaseException(SerializationInfo info, StreamingContext context) : base(info, context)
重建通过流传输的异常对象。有关详细信息,请参阅

序列化是指在内存中获取对象并将其转换为某种文本或二进制表示形式,这些文本或二进制表示形式可以通过网络传输或存储在磁盘上,是用于与web服务对话的协议


因此,当Web服务抛出异常,并且系统必须通过网络将异常获取给客户端时,将使用构造函数

InnerException
用于捕获异常并重新播放它

举一个有点做作的例子,假设您有一组数据访问方法。各种各样的东西都可能出错,所以你可以这样包装它们:

try
{
    //  stuff
}
catch (Exception ex)
{
    throw new MyDataAccessException("Error accessing data", ex);
}
现在,您的代码可以捕获
MyDataAccessException
以获取由数据访问问题引起的任何异常,但是处理程序可以查看
MyDataAccessException
对象的
InnerException
属性,以准确地找出错误所在以及错误所在

protected CantConnectToDatabaseException(SerializationInfo info, StreamingContext context) : base(info, context)
重建通过流传输的异常对象。有关详细信息,请参阅

序列化是指在内存中获取对象并将其转换为某种文本或二进制表示形式,这些文本或二进制表示形式可以通过网络传输或存储在磁盘上,是用于与web服务对话的协议


因此,当Web服务抛出异常,并且系统必须通过网络将异常获取给客户端时,将使用构造函数

看看代码。他们是干什么的?你有什么具体问题吗?有没有什么不清楚的地方,或者看起来有悖常理的地方?与编程中的任何问题一样,当你看到一堵无法理解的垃圾墙时,把它分解成越来越小的单元,直到它们变得可以管理为止。我从来没有使用过最后一个构造函数,但是有一个带有
innerException
属性的构造函数对于异常来说是非常标准的。当父异常在堆栈中冒泡时,通常会在父异常中“包装”异常。它们只需使用传递的参数调用基
异常
类。除此之外,除非你添加一些代码,否则它们不会做任何事情。我经常使用异常,而且我总是自动生成它们,但最后两个构造函数总是不使用,我试图找出它们的用途,但找不到明确的解释。如果你想知道基类的作用,那么代码是公开的:看看代码。他们是干什么的?你有什么具体问题吗?有没有什么不清楚的地方,或者看起来有悖常理的地方?与编程中的任何问题一样,当你看到一堵无法理解的垃圾墙时,把它分解成越来越小的单元,直到它们变得可以管理为止。我从来没有使用过最后一个构造函数,但是有一个带有
innerException
属性的构造函数对于异常来说是非常标准的。当父异常在堆栈中冒泡时,通常会在父异常中“包装”异常。它们只需使用传递的参数调用基
异常
类。除此之外,除非你添加一些代码,否则它们不会做任何事情。我经常使用异常,并且总是自动生成它们,但最后两个构造函数总是不被使用,我试图找出它们的用途,但找不到明确的解释。如果你想知道基类是做什么的,代码是公开的:@Steve,我不是OP。我了解构造函数是如何工作的,但我不理解参数