`System.Exception`结构的派生类是否等同于`System.Exception`?

时间:2017-05-22 18:49:31

标签: c# type-systems structural-equality

我在看

所有(或大多数情况下)System.Exception的派生类(无论是用户定义的还是系统定义的)都是structurally equivalent到它们的基类System.Exception是否正确,尽管他们是non nominally equivalent

感谢。

2 个答案:

答案 0 :(得分:1)

没有。当我从System.Exception继承时,我将新变量添加到派生类。一些股票例外也是如此。

答案 1 :(得分:1)

不一定(可能根本不存在)。根据定义,任何继承System.Exception的类都将实现System.Exception实现的所有内容。但是,它也会有自己的差异。

让我们看一个简单的例子:ArgumentNullException。这是一个System命名空间异常,因此由C#的创建者定义。将System.ExceptionSystem.ArgumentNullException进行比较会显示出差异。例如:

ArgumentNullException有一个额外的构造函数,其签名为ArgumentNullException(String,String),允许您传入null参数的名称。

ArgumentNullException有一个额外的属性:ParamName,用于保存参数的名称为null并导致异常。

由于我只关注最高级别,因此实施这些方法的常用方法也可能存在差异。

我只想说,一个儿童班很少看起来与其父母相同。