C#相当于Java的Storable是什么?

2022-09-01 19:20:11

什么 C# 等同于 Java?Throwable

在 Java 中,异常类层次结构的根称为 Throwable而不是 。基类有两个派生类:ExceptionThrowable

Exception:对于合理的应用程序可能想要捕获的条件。

Error:对于合理的程序不应尝试捕获的严重问题。

因此,基类包含合理的程序不应尝试捕获的问题。Throwable


答案 1

这将是异常类。除了 .NET 中的异常之外,没有单独的“可抛出”概念。


答案 2

.Net 允许任何类的异常,但 C# 将 throw 和 catch 限制为 Exception。使用既不指定类型也不指定变量的 catch 子句来捕获非异常异常。

相关规范片段:

当 catch 子句指定类类型时,该类型必须是 System.Exception、从 System.Exception 派生的类型或将 System.Exception(或其子类)作为其有效基类的类型参数类型。

当 catch 子句同时指定类类型和标识符时,将声明给定名称和类型的异常变量。异常变量对应于作用域延伸到 catch 块上的局部变量。在执行 catch 块期间,异常变量表示当前正在处理的异常。出于明确赋值检查的目的,异常变量被视为在其整个范围内明确赋值。

除非 catch 子句包含异常变量名称,否则无法访问 catch 块中的异常对象。

既不指定异常类型也不指定异常变量名称的 catch 子句称为常规 catch 子句。try 语句只能有一个常规 catch 子句,如果存在一个子句,它必须是最后一个 catch 子句。

某些编程语言可能支持无法表示为从 System.Exception 派生的对象的异常,尽管此类异常永远不会由 C# 代码生成。可以使用一般捕获子句来捕获此类异常。因此,一般 catch 子句在语义上与指定类型 System.Exception 的子句不同,因为前者也可能捕获来自其他语言的异常。

.Net 4.0 引入了一个类似于 Java 的 Error 类的概念。虽然损坏的状态异常扩展了异常,但只有具有 HandleProcessCorruptedStateExceptionsAttribute 的方法才能捕获 CSE。