Я прочитал официальную документацию, и я понимаю, какие ссылки на классы, но я не вижу, когда и почему они являются лучшим решением по сравнению с альтернативами.
Пример, приведенный в документации, - TCollection, который может быть создан с любым потомком TCollectionItem. Обоснованием использования ссылки на класс является то, что он позволяет вам вызывать методы класса, тип которых неизвестен во время компиляции (я предполагаю, что это время компиляции TCollection). Я просто не вижу, как использование TCollectionItemClass в качестве аргумента превосходит использование TCollectionItem. TCollection все равно сможет удерживать любого потомка TCollectionItem и все еще иметь возможность ссылаться на любой метод, объявленный в TCollectionItem. Не правда ли?
Сравните это с общей коллекцией. Похоже, что TObjectList предлагает те же функции, что и TCollection, с дополнительным преимуществом безопасности типов. Вы освобождаетесь от требования унаследовать от TCollectionItem, чтобы сохранить тип объекта, и вы можете сделать коллекцию как специфическую по типу. И если вам нужно получить доступ к элементам элемента из коллекции, вы можете использовать общие ограничения. Помимо того факта, что ссылки на классы доступны для программистов до Delphi 2009, есть ли какая-либо другая веская причина использовать их в общих контейнерах?
Другой пример, приведенный в документации, - это передача ссылки класса на функцию, которая действует как объект factory. В этом случае a factory для создания объектов типа TControl. Это не совсем очевидно, но я предполагаю, что TControl factory вызывает конструктор передаваемого ему типа потомка, а не конструктор TControl. Если это так, то я начинаю видеть по крайней мере некоторую причину использования ссылок на классы.
Итак, я думаю, что я действительно пытаюсь понять, когда и где ссылки на классы наиболее подходят и что они покупают у разработчика?