为什么Exception是一个类,而不是一个struct?

时间:2017-04-14 10:31:07

标签: c# class exception struct

  • 异常代表一条信息。
  • 异常是(或应该)定义在应用程序生命周期中很少发生,所以拳击,拆箱和复制不是我认为的问题。
  • 异常几乎总是超出创建它们的范围,因此存在引用存储在某处的异常的风险,这使得它成为升级到下一代GC的良好候选者,而结构更容易清理。
  • 不可变结构是线程安全的。
  • 你永远不希望Exception为null(即使编译器或CLR强制执行此操作,请尝试下面的操作):

    throw null;
    

    然后,你会得到:

    NullReferenceException
    

为什么例外是课程有什么具体原因?

1 个答案:

答案 0 :(得分:3)

两件最重要的事情:

  • 无法继承结构,因此您无法在例外中构建任何层次结构
  • 如果是StackOverflowException,则无法在堆栈上分配内存,需要堆