ExceptionRef

Top  Previous  Next

What is translated > class-reference type > ExceptionRef

There is a special problem with exceptions: while Delphi exceptions as all other classes are derived from TObject, this isn't possible in C#. In C# only classes derived from System.Exception can be thrown and catched. Therefore ClassRef''s, which are made to create TObject types cannot be used for exceptions. Delphi2C# uses an analogously ExceptionRef<T> instead. The definition of this class is inserted on top of the manually prepared System.External.ExcUtils.cs. Like ClassRef<T> ExceptionRef<T> is derived from TMetaClass, but instead of the function

 

public override TObject Create()

 

ExceptionRef<T> has the function:

 

public override System.Exception Create(string s)

 

This function uses the CreateInstance function from System.Reflection to create exceptions. The base function:

 

public virtual Exception Create(string s)

 

has been added to TMetaClass for this reason.

 

By use of the ExceptionRef<T> hierarchy for example the following line of code in System.Sysutils:

 

     E := ExceptTypes[ExceptMap[ErrorCode].EClass].Create(ExceptMap[ErrorCode].EIdent);

 

is translated to C# quite natuaral to:

 

  E = (System.SysUtils.Exception) ExceptTypes[(int) ExceptMap[ErrorCode - 3].EClass].Create(ExceptMap[ErrorCode - 3].EIdent);

 

 



This page belongs to the Delphi2C# Documentation

Delphi2C# home  Content