2017-04-14 81 views
3
  • 异常表示单条信息。
  • 例外的是(或应该)通过在应用生命周期的定义很少发生这样装箱,拆箱和复制不是问题,我认为。
  • 例外几乎总是走出去的范围从创建它们在哪里,所以是具有参考存储的地方使它很好的候选人晋升为下一个GC代异常的风险,而结构更易于清理。
  • 不可改变的结构是线程安全的。
  • 你永远不希望异常为空(甚至是编译器或CLR力这一点,尝试做什么下文):为什么异常是一个类,而不是结构?

    throw null; 
    

    那么,你会得到:

    NullReferenceException 
    

有什么特殊原因为什么异常是类?

+4

“”你永远都不想例外是空'Exception.InnerException可以检查空。结构需要分配到堆栈中,但在堆栈溢出的情况下将分配什么?另外''Structs可以实现一个接口,但是他们不能从另一个结构继承''作为doc说的 – oleksa

+1

许多答案,但非常重要的一点是你不能拥有一个结构层次结构 - 而Exceptions层次结构是非常重要的,是'catch'工作方式的基础(也就是说,你可以捕获从大多数到最少派生的异常以处理一般情况之前的特定情况)。 –

+0

@oleksa你是完全正确的。继承是将异常作为类的重要参数。 – Creo

回答

3

两个最重要的事情:

  • 结构不能被继承,所以你不能做任何的层次结构中的异常
  • 在StackOverflowException的情况下,你不能在栈上分配内存,你需要堆
相关问题