Вы можете сделать это в .NET, потому что Delphi и .NET по-разному обрабатывают дженерики. Я не знаю достаточно, чтобы вдаваться в подробности. Я знаю, почему вы не можете сделать это в Delphi.
Каждый виртуальный метод должен иметь слот в таблице виртуальных методов для класса. Это необходимо настроить при компиляции устройства, чтобы его информация могла быть помещена в DCU. (И аналогично, каждый динамический метод должен иметь запись в таблице динамических методов во время компиляции модуля.)
Но если вы создаете общие методы, каждый раз, когда вы вызываете их в коде, создается другая копия кода, специфичная для этого параметра типа. Это необходимо для обработки разных типов по-разному. (Если вы, например, передаете интерфейс или строку, он должен позаботиться о количестве ссылок.) Но вы не можете создавать новые виртуальные методы и новые слоты VMT для них, поскольку DCU уже создан и не может быть изменено сейчас .