Show/Hide Toolbars

XSharp

 

生成代码以完全实现与 VO 兼容的 BEGIN SEQUENCE ... END SEQUENCE。

编译器会生成对运行时函数 _SequenceError 和 _SequenceRecover 的调用,您可以在自己的代码中覆盖这些函数。

-vo17[+|-]

参数

+ | - 指定 + 或 -vo17,编译器会自动生成与父类构造函数具有相同签名的构造函数

 

要在 Visual Studio 开发环境中设置该编译器选项,请执行以下操作

 

1.打开项目的 "属性"页面

2.点击 Dialect 选项卡

3.更改值

4.查看属性页

 

 

编译器生成的代码将调用 2 个运行时函数,以便调整 BEGIN SEQUENCE ... END SEQUENCE 处理的行为。

 

这些函数在 XSharp 运行时中的默认实现:

/// <summary>
/// 此函数是由编译器自动插入到RECOVER USING块中的,并在到达RECOVER USING块时调用,因为发生了异常。
/// </summary>
/// <param name="e">触发跳转到RECOVER USING块的异常</param>
/// <remarks>
/// 此函数的默认实现(在XSharp.RT程序集中)调用了通过ErrorBlock()安装的错误处理程序。
/// 然后,该函数应具有以下原型
/// <code language="X#">
/// FUNCTION _SequenceError(e as Exception) AS VOID
/// </code>
/// </remarks>
/// <returns>调用安装在ErrorBlock中的错误处理程序的结果</returns>
/// <seelso cref='O:XSharp.RT.Functions._Break'>Break Function</seealso>
/// <seelso cref='O:XSharp.RT.Functions.ErrorBlock'>Break Function</seealso>
FUNCTION _SequenceError(e as Exception) AS USUAL
  LOCAL error as XSharp.Error
  IF e IS XSharp.Error VAR err
       error := err
  ELSE
       error := Error{e}
  ENDIF
  RETURN Eval(ErrorBlock(), error)
/// <summary>
/// 当您的代码中有一个 BEGIN SEQUENCE .. END SEQUENCE 而没有 RECOVER USING 子句时,
/// 编译器会在编译生成的 RECOVER USING 块中自动插入此函数
/// </summary>
/// <param name="u">在 BREAK 语句或调用 _Break 函数时传递的参数</param>
/// <remarks>如果发生真正的异常,则不会调用此函数。只有在从 BREAK 语句传递值时才会调用该函数(生成的)RECOVER USING 块。<br />
/// 此函数的默认实现(在 XSharp.RT 程序集中)不执行任何操作。
/// 如果需要,您可以在自己的代码中重写此函数。
/// 然后,该函数应具有以下原型
/// <code language="X#">
/// FUNCTION _SequenceRecover(u as USUAL) AS VOID
/// </code>
/// </remarks>
/// <seelso cref='O:XSharp.RT.Functions._Break'>Break Function</seealso>
FUNCTION _SequenceRecover(u as USUAL) AS VOID
  RETURN