Как вызвать исходный код класса, когда помощник класса находится в области видимости?

Я провожу модульное тестирование на улучшенной версии быстрой сортировки.
(Надеемся) более быстрая версия реализована с использованием:

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,

Если в области видимости есть помощник класса, как я могу вызвать оригинальные методы?

Есть ли способ, используя RTI или какой-то другой окольный метод?

1 ответ

Решение

Я думаю, что единственный способ достичь этого с помощью чистого кода Pascal - это вызвать Sort из области, в которой ваш помощник класса не активен. Дело в том, что если ваш помощник класса активен, то 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.
Другие вопросы по тегам