gpt4 book ai didi

c# - C# 中的事件处理程序应该引发异常吗?

转载 作者:IT王子 更新时间:2023-10-29 04:09:45 24 4
gpt4 key购买 nike

作为一般规则,在任何情况下,负责监听事件的方法抛出(或允许抛出)引发事件的类必须处理的异常是可以接受的吗?

鉴于这样的异常会阻止该事件的其他监听器随后被调用,允许这种情况发生似乎有点“反社会”,但另一方面,如果有异常,它应该做什么?

最佳答案

从事件处理程序中抛出异常在很多方面类似于从 IDisposable.Dispose 方法(或 C++ 析构函数)中抛出异常。这样做会给您的来电者造成严重破坏,因为您让他们别无选择。

  1. 忽略异常并让它传播。这违反了他们通知所有听众事件的契约(Contract)。如果堆栈中位于他们之上的任何人捕获异常,这将是一个非常现实的问题。
  2. 捕获它调用其他处理程序并重新抛出。但是,如果其他人中的一个也抛出会发生什么?
  3. 接受异常(exception)。总的来说这很糟糕。事件源应该不知道他们的调用者,因此不知道他们在吞咽什么。
  4. 让流程崩溃,因为你完蛋了。

在所有这些中,#4 是最佳选择。但这种情况很少完成,也不能指望。

我认为在你的组件中你真的只有几个选择

  • 您正在调用正在抛出异常的代码,并且处于处理异常的最佳位置。如果您无法处理它,那么期望其他任何人都可以处理它是不合理的。因此,使进程崩溃并完成它。
  • 不要调用抛出异常的 API

关于c# - C# 中的事件处理程序应该引发异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3114543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com