C#与Java';s可投掷

本文关键字:Java | 更新日期: 2023-09-27 18:20:58

什么是等价于Java的Throwable的C#?

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

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

Error:对于一个合理的程序不应该试图抓住的严重问题。

因此,Throwable基类包含了一个合理的程序不应该试图捕捉的问题。

C#与Java';s可投掷

这将是Exception类。除了.NET中的异常之外,没有单独的"可丢弃"概念。

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

相关规范片段:

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

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

除非catch子句包含异常变量名,否则不可能访问catch块中的异常对象。

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

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

.Net 4.0引入了一个类似于Java的Error类的概念。当CorruptedStateException扩展Exception时,只有具有HandleProcessCorruptedstateException属性的方法才能捕获CSE。