2010-02-06 11 views
8

डेल्फी 2010 में नई विस्तारित आरटीटीआई के साथ, क्या डेल्फी एप्लिकेशन (रन टाइम पर) किसी दिए गए इंटरफ़ेस को लागू करने वाले सभी वर्गों की एक सूची बना सकता है?किसी दिए गए इंटरफ़ेस को लागू करने वाले सभी डेल्फी कक्षाओं का आकलन करें?

उत्तर

20

तकनीकी रूप से हाँ, जब तक इंटरफ़ेस में GUID है और जिन कक्षाओं की आप परवाह करते हैं वे इकाइयों के इंटरफ़ेस अनुभागों में हैं।

आरटीटीआई इकाई (कक्षा) में एक वर्ग लागू नहीं होने वाले सभी इंटरफेस का वर्णन करने के लिए एक एपीआई नहीं है, लेकिन डेटा प्रकार की जानकारी में है।

एक अंतरफलक प्रकार के लिए GUID इस अभिव्यक्ति से मिल जा सकता है:

GetTypeData(TypeInfo(ITheInterface))^.Guid 

या:

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

उदाहरण प्रकार के वर्ग तो TClass.GetInterfaceEntry(IID) का उपयोग कर जाँच की जा सकती - अगर यह गैर रिटर्न -निल, कक्षा इंटरफेस लागू करता है।

इकाइयों के इंटरफ़ेस अनुभागों में घोषित सभी कक्षाओं को TRttiContext.GetTypes के माध्यम से पुनर्प्राप्त किया जा सकता है।

वास्तविक पुनरावृत्ति और निष्कर्षण कोड को पाठक के लिए अभ्यास के रूप में छोड़ दिया गया है।

संबंधित मुद्दे