سؤال

مع جديد Extended RTTI في Delphi 2010، هل يمكن تطبيق Delphi (وقت التشغيل) إنشاء قائمة بجميع الفئات التي تنفذ واجهة معينة؟

هل كانت مفيدة؟

المحلول

نعم من الناحية الفنية، طالما أن الواجهة تحتوي على GUID والفصول التي تهتم بها هي في أقسام واجهة الوحدات.

لا تحتوي وحدة RTTI (حتى الآن) على API لوصف جميع الواجهات التي تنفذ فئة، ولكن البيانات موجودة في "معلومات النوع".

يمكن الحصول على GUID لنوع الواجهة من هذا التعبير:

GetTypeData(TypeInfo(ITheInterface))^.Guid

أو:

ctx: TRttiContext;
// ...
(ctx.GetType(TypeInfo(ITheInterface)) as TRttiInterfaceType).GUID

يمكن بعد ذلك التحقق من فئة نوع المثيل باستخدام TClass.GetInterfaceEntry(IID) - إذا ترجع غير NIL، فإن الفصل ينفذ الواجهة.

يمكن استرجاع جميع الطبقات المعلنة في أقسام واجهة من الوحدات عبر TRttiContext.GetTypes.

تترك كتابة التكرار الفعلي ورمز الاستخراج كممارسة للقارئ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top