gpt4 book ai didi

.net - 为什么 .NET 异常是可变的?

转载 作者:行者123 更新时间:2023-12-04 02:11:07 25 4
gpt4 key购买 nike

我想知道为什么基类库中的 .NET 异常类默认有一些可变成员

  • 为什么我可以更改 Source , HelpLink和来自 Data 的值,但不能更改其他任何内容,例如 Message ?
  • 为什么抛出异常会重写StackTrace让它也可变?将堆栈跟踪信息附加到现有跟踪会是更好的设计(但仍然可变)?
  • .NET 异常设计可能有哪些改进?

  • 我只是在设计选择上很有趣......

    最佳答案

    StackTrace至少对我来说是有意义的。这个想法是一个 Exception (作为对象)可以传递,从方法返回等。 StackTrace仅在抛出和捕获异常时才重要。从某种意义上说,StackTrace实际上更多的是抛出异常的属性,而不是 Exception对象本身。

    关于其他属性的可变性,我认为这只是因为通过分配给属性而不是强制它们全部进入构造函数来构造实例更容易。记得当时Exception设计时,C# 没有可选参数。

    您可以考虑重新设计 Exception和派生类是不可变的,但这需要异常工厂或构建器类。它只会从 Exception 派生那要复杂得多。

    关于.net - 为什么 .NET 异常是可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3080519/

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