当 class 助手在范围内时如何调用原始 class 的代码?

How to call the original class's code when a class helper is in scope?

我正在对改进版的快速排序进行一些单元测试。
(希望)更快的版本是使用以下方法实现的:

TArrayHelper = class helper for System.Generics.Collections.TArray
....
   class procedure Sort<T>(var Values: array of T); overload; static;
   class procedure Sort<T>(var Values: array of T; Comparer: IComparer<T>); overload; static;
....

我知道现在我可以将 Sort 重命名为 SortNew 以进行测试,但在某些时候我必须将方法名称固定为 sort

如果范围内有 class 助手,我该如何调用原始方法?

有没有办法使用 rtti 或其他迂回方法?

我认为使用纯 Pascal 代码实现此目的的唯一方法是从您的 class 助手未激活的范围调用 Sort。关键是,如果您的 class 助手处于活动状态,则 Sort 指的是助手中的方法。

比如像这样:

unit ScopeBuster;

interface;

uses
  System.Generics.Collections;

type
  TArrayScopeBuster = class
    class procedure Sort<T>(...); overload; inline; static;
  end;

implementation

class procedure TArrayScopeBuster.Sort<T>(...); 
begin
  TArray.Sort(...);
end;

end.