На двоичном уровне нет никакой разницы между статической функцией класса и обычной функцией с одинаковыми аргументами и типом результата - они двоичные совместимы, поэтому ваш пример в порядке.Конечно, это разные типы для компилятора, поэтому вам нужно Addr()
или @
для компиляции вашего примера.
Addr()
эквивалентно оператору @
, за исключением того, что на него не влияет $Директива компилятора T. Если вы переключите проверку типа, ваш пример не скомпилирует:
{$T+}
begin
CallIt(@TMyClass.StaticMethod);
Readln;
end.
[Pascal Error] Project10.dpr (28): E2010 Несовместимые типы: 'TFunc' и 'Pointer'