何年にもわたる 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 イディオムについて誰かが少し情報を提供できれば、私は知りたいです。