.net NET是否有类似于Delphi';埃伯特在哪里?
NET是否有类似于Delphi的EAPort的异常 目前,我定义了自己的“AbortProcess”继承异常。 以及忽略“AbortProcess”的My.Application.UnhandledException处理程序 我仍然想知道.NET中是否已经存在类似的机制.net NET是否有类似于Delphi';埃伯特在哪里?,.net,delphi,exception,.net,Delphi,Exception,NET是否有类似于Delphi的EAPort的异常 目前,我定义了自己的“AbortProcess”继承异常。 以及忽略“AbortProcess”的My.Application.UnhandledException处理程序 我仍然想知道.NET中是否已经存在类似的机制 Class AbortProcess Inherits System.Exception End Class Sub Abort() Throw New AbortProcess() End Sub Sub
Class AbortProcess
Inherits System.Exception
End Class
Sub Abort()
Throw New AbortProcess()
End Sub
Sub AppDomain_UnhandledException(ByVal sender As Object, ByVal e As ApplicationServices.UnhandledExceptionEventArgs)
If TypeOf e.Exception Is AbortProcess Then
e.ExitApplication = False
End If
End Sub
Sub PerformActions()
Action1()
If Not Action2() Then
Abort()
End If
Action3()
...
End Sub
典型的.NET开发人员如何处理这个用例
更新:
不幸的是,出于某些原因,许多人投票反对这个问题,没有发表任何评论。我能理解的唯一原因是,他们可能认为异常永远不应该被用来控制程序流;我倾向于同意这一点。然而,我最近研究了ANTLR,发现它们确实使用自定义异常(RecognitionException)作为控制流构造。结合Python的StopIteration用法,我相信使用Exception作为控制流构造实际上已经被广泛使用。它只是不像Delphi VCL那样被标准化。我知道的唯一一个是“调用中止方法时引发的异常。”如果您想在.Net中快速退出应用程序,异常不是最佳路径。您显式抛出的任何异常都可能被捕获并接受。如果使用正确的技巧,即使是像ThreadAbortException这样危险的异常也会被捕获 快速退出应用程序的最佳方法是使用Environment.exit
当CLR抛出堆栈溢出(不提供自定义主机)时,它是一个不可修补的异常,因此可能会或有意创建一个堆栈溢出场景 这基本上是一个例外,只是作为功能的快速退出。NET异常并不打算这样做,吞下它们是非常糟糕的做法 异常不应用于处理数据流。若您认为某些东西可能会失败,您可以抛出异常,但在第一个适当的时刻捕获它。让异常落在UnhandledException函数中,并将其吞没,这是一种糟糕的做法,可能会使应用程序处于未知状态(因为异常通过的所有方法都将被“中止”) 在这种情况下,如果您需要该sub中的异常,我将在调用时捕获它:
try {
PerformActions()
} catch (AbortProcess) {
//do some cleaning up or just ignore
}
通过这种方式,异常会在接近其来源的地方被捕获,并且任何清理都仅限于该函数。所有其他异常都将传递给UnhandledException函数,在该函数中,您可以做的最好的事情是报告错误并关闭应用程序。有两个特性定义了Delphi的
EAPort
异常类
EAbort
及其子体,并且在捕获此类异常时不显示通常的消息框eaport
异常旨在使程序停止运行它正在运行的任何事件或消息处理程序,并在主消息循环中恢复。但是,为了让它真正起作用,需要编写所有其他代码来正确处理异常。也就是说,他们需要使用finally
节来保持自己处于稳定和一致的状态,并且他们需要重新抛出或永远不要捕获他们实际上无法修复的异常。正如您在代码示例中所注意到的,这个假设的异常显然不是用来终止应用程序的。这意味着中止当前事件处理程序并返回消息循环。Yike!谁他妈的投我反对票?!?!?!?我只是一个尝试进入.NET编程的Delphi程序员。我发现.NET中缺少一些Delphi概念,所以我在这里询问正确的方法。这有什么不对?!?!?!?