Несмотря на годы программирования в Delphi, я только что столкнулся со стилем объявления класса, который я никогда не видел для класса, поддерживающего IUnknown:
TBCUnknown = class(TBCBaseObject, IUnKnown)
private
FRefCount: integer;
FOwner : Pointer;
protected
function IUnknown.QueryInterface = NonDelegatingQueryInterface;
function IUnknown._AddRef = NonDelegatingAddRef;
function IUnknown._Release = NonDelegatingRelease;
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
...
Как вы можете видеть, присвоение методов класса методам интерфейса IUnknown выполняется прямо в объявлении класса. Для меня это выглядит очень странно, особенно потому, что я не понимаю, как методы IUnknown могут быть назначены до вызова конструктора. Является ли это своего рода ярлыком времени компиляции для создания назначений между методами класса и указателями интерфейса для интерфейса, который принимает класс, которые позже будут разрешены во время выполнения? Если кто-то может предоставить немного информации о том, как это работает, и какая идиома Delphi поддерживает такую конструкцию, я бы хотел знать.