首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET中已检查和未检查的异常

.NET中已检查和未检查的异常
EN

Stack Overflow用户
提问于 2010-09-21 23:29:33
回答 6查看 10.1K关注 0票数 4

当我阅读APUE( UNIX环境中的高级编程)时,一个奇怪的想法出现在我的脑海中。

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

所以,总而言之,在一个程序中,你有两种错误,其中一种是严重的,会导致系统崩溃,而你对此无能为力。另一个更像是一个信号,你可以捕捉到它,并采取一些措施来修复它。

我听说在C#中没有检查和未检查的异常,那么C#没有严重和非严重错误的概念吗?我非常好奇,因为我认为这个概念是非常基本的。

更新:其他语言中的异常设计是什么?有人能谈谈这件事吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-09-21 23:36:36

在Java中,检查过的和未检查过的异常并不能精确地映射到致命或非致命错误。检查异常明确地表示异常可能被抛出,必须有人捕捉它(尝试处理它或将其抛出堆栈),但不能保证错误不会是致命的(例如,SQL查询中的语法错误将抛出SQLException,很可能是致命的,但它是检查异常)。未检查的异常只是意味着某人不需要捕获它,但如果您愿意,您仍然可以捕获它。它通常会指示编程错误。Java错误通常表示无法恢复的问题(例如OutOfMemoryError)。

未检查异常的C#设计意味着您不需要捕获异常,如果未捕获将导致应用程序崩溃。在开发社区中,检查异常与未检查异常之间的争论由来已久,两者各有优缺点。但是,通常情况下,您无法对异常做任何操作,并且它通常只会被记录下来,而不是被处理,因此C#将异常设置为未检查。当您可以处理它们时(例如,如果您想重试IO操作),您仍然可以捕获它们并重试。

票数 8
EN

Stack Overflow用户

发布于 2010-09-21 23:40:10

在我不再工作的以前的系统中,我在.NET中创建了两级(致命和非致命)异常系统--主要是通过从Exception类继承到另外两个基类(FatalExceptionNonFatalException),然后从这两个基类派生出更具体的Exception类。我不再以这种方式工作的事实表明,我不再认为这是必要的--它只是增加了系统的仪式,而没有增加太多价值。

票数 2
EN

Stack Overflow用户

发布于 2016-07-11 01:17:47

IMHO一个内置异常类属性的c#编译器会更好,比如CriticalException vs. NonCriticalException。如果使用此属性或( .NET运行时中的MS)修饰异常类,则如果在调用图中找不到catch块,编译器将向您发出警告(假设在调用图中抛出了此特定异常)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3761844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档