type
   EBadStuff=class(Exception);....
begin
   try
       ...
   except
       on E:EBadStuff do
          ...
   end;
end;
为什么在程序中E不要create呢?
也就是为什么不要 E:=EBadClass.create()呢?
是不是这里只是起到一个定义变量的作用?在发生异常时,编译器会将异常的类型与EBadClass比较,如果是一样的话,就将异常赋给E变量,则此时EBadClass类型的实例E了?

解决方案 »

  1.   

    那不是又生成了一个异常吗?当然不能create 了.
      

  2.   

    发生异常的是否已经有一个异常实例了,异常有不是在你的异常处理程序里面产生的,怎么可能在你里面create呢?
      

  3.   

    这个异常对象的create是通过raise来调用的。
    raise EBadStuff.Create(...);
    之后delphi自己的异常处理机制会将这个对象赋值给最近一层的try..except..中的变量(如E),查不多可以把on E:EBadStuff do看作只是对变量的类型声明吧,
    具体的还是要研究汇编码了。。
      

  4.   

    on....do语句是不是将异常类产生的实例赋给on...do语句中的异常变量?也就是说:
         EBadStuff.Create()产生的实例在on...do语句中,将赋给E:EBadStuff所定义的变量E?