8
隨着Delphi 2010中新的擴展RTTI,Delphi應用程序(運行時)是否可以構建實現給定接口的所有類的列表?枚舉實現給定接口的所有Delphi類?
隨着Delphi 2010中新的擴展RTTI,Delphi應用程序(運行時)是否可以構建實現給定接口的所有類的列表?枚舉實現給定接口的所有Delphi類?
從技術上講,只要界面有一個GUID,並且您關心的類位於單元的界面部分。
RTTI單元尚未具有用於描述類實現的所有接口的API,但數據位於類型信息中。
的GUID對於接口類型可以從這個表達式得到:
GetTypeData(TypeInfo(ITheInterface))^.Guid
或:
ctx: TRttiContext;
// ...
(ctx.GetType(TypeInfo(ITheInterface)) as TRttiInterfaceType).GUID
的類實例類型的然後可以使用TClass.GetInterfaceEntry(IID)
檢查 - 如果它返回非-nil,類實現接口。
可以通過TRttiContext.GetTypes
檢索在單元的接口部分中聲明的所有類。
編寫實際的迭代和提取代碼留給讀者練習。