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

时间:2013-07-03 19:30:02

标签: c# java exception throwable

什么是C#等同于Java的Throwable

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

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

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

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

2 个答案:

答案 0 :(得分:17)

那将是Exception class。除了.NET中的例外之外,没有单独的“可抛出”概念。

答案 1 :(得分:1)

.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子句可用于捕获此类异常。因此,一般的catch子句在语义上与指定System.Exception类型的子句不同,因为前者也可以捕获来自其他语言的异常。

.Net 4.0引入了类似于Java的Error类的概念。虽然Corrupted State Exceptions扩展了Exception,但只有HandleProcessCorruptedStateExceptionsAttribute的方法才能捕获CSE。