在.NET中检查和取消选中的异常

Fro*_*Zzz 4 .net c c# java unix

当我在阅读APUE(UNIX环境中的高级编程)时,一个奇怪的想法来到我身边.

似乎在UNIX的错误处理中,有两种类型的错误(FATAL和INFATAL).我觉得这与JAVA中的已检查和未经检查的异常有关.

因此,总而言之,在一个程序中,您有两种错误,其中一种是关键的,会导致系统崩溃,而您却无能为力.另一个更像是一个信号,你可以抓住并做一些事情来解决它.

我听说在C#中没有检查和未检查的异常,所以C#没有关键和非关键错误的概念吗?只是非常好奇,因为我认为这个概念非常基础.

更新:其他语言的例外设计是什么?任何人都可以谈论这个吗?

Jef*_*rey 8

在Java中,已检查和未检查的异常并不完全映射到致命或非致命错误.显式检查异常明确表示可能抛出异常并且有人必须捕获它(尝试处理它或将其抛出堆栈),但不能保证错误可能不是致命的(即语法中的语法错误) SQL查询将抛出一个SQLException并且可能是致命的,但它是一个经过检查的异常).未经检查的异常仅表示某人不需要捕获它,但如果您愿意,您仍然可以.它通常表示编程错误.Java错误通常表示不可恢复的问题(例如OutOfMemoryError).

未经检查的异常的C#设计意味着您不需要捕获异常,如果未被捕获将使应用程序崩溃.检查与未检查的异常一直是开发社区长期存在的争论,两者都有利有弊.但通常情况下,您无法对异常执行某些操作,并且它经常最终会被记录而不是处理,因此C#使异常未经检查.当您可以处理它们时(例如,如果您想重试IO操作),您仍然可以捕获它们并重试.