2017-05-25 4 views
5

मैं निम्नलिखित इंटरफेस है:क्या आप गिनती प्रदान नहीं करते हैं तो संदर्भ गणना अभी भी डेल्फी इंटरफेस के साथ काम करती है?

type IDataAccessObject<Pk; T:class> = interface 
    getByPrimaryKey(key: PK) : T; 
    //... more methods 
end; 

और इंटरफेस के एक कार्यान्वयन इस प्रकार है:

type TMyClassDAO = class(TInterfacedObject, IDataAccessObject<integer, TMyClass>) 
    getByPrimaryKey(key:integer) : TMyClass; 
    // more methods 
end; 

ध्यान दें कि मैं नहीं इंटरफेस के लिए एक guid प्रदान कर रहा हूँ (क्योंकि के हर इन्स्टेन्शियशन पिछला जेनेरिक इंटरफ़ेस एक अलग इंटरफ़ेस है और उन्हें उसी guid साझा नहीं करना चाहिए)। हालांकि मुझे यकीन नहीं है कि क्या TInterfacedObject द्वारा लागू संदर्भ गणना को तोड़ना नहीं है?

+1

यह भी देखें [क्या डेल्फी में इंटरफेस का उपयोग करने के लिए आवश्यक GUID हैं?] (Https://stackoverflow.com/q/2992183/576719)। –

उत्तर

15

संदर्भ गणना GUID पर निर्भर नहीं है, लेकिन _AddRef() और _Release() विधि कार्यान्वयन पर निर्भर नहीं है।

चूंकि आप TInterfacedObject से प्राप्त होते हैं, इसलिए संदर्भ गणना आपके सभी ऑब्जेक्ट उदाहरणों के लिए काम करेगी।

केवल एक चीज आप खो देते हैं अगर आप एक GUID प्रदान नहीं करते ऐसे Supports() समारोह, QueryInterface() इंटरफ़ेस विधि करने के लिए कॉल के रूप में एक-दूसरे इंटरफेस, और is और as ऑपरेटरों को क्वेरी करने की क्षमता है।

+0

स्पष्टीकरण के लिए धन्यवाद! – BigONotation

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