2010-07-16 8 views
6

इस बारे में उत्सुक है कि .NET CLR आंतरिक रूप से इंटरफेस को कैसे संभालता है?.NET CLR आंतरिक रूप से "इंटरफेस" को कैसे कार्यान्वित करता है?

Q1] क्या जब CLR की तरह कुछ का सामना करना पड़ता होता है: (। एक ही नीचे का इस्तेमाल किया)

simple interface example.

interface ISampleInterface 
    { 
     void SampleMethod(); 
    } 

    class ImplementationClass : ISampleInterface 
    { 
     // Explicit interface member implementation: 
     public void SampleMethod() 
     { 
      // Method implementation. 

     } 

     static void Main() 
     { 
      //Declare an interface instance. 
      ISampleInterface mySampleIntobj = new ImplementationClass(); // (A) 
      // Call the member. 
      mySampleIntobj.SampleMethod(); 

      // Declare an interface instance. 
      ImplementationClass myClassObj = new ImplementationClass(); // (B) 
      //Call the member. 
      myClassObj.SampleMethod(); 

     } 
    } 

Q2: ऊपर के उदाहरण कैसे हैं (ए) और (बी) अंतरित?

प्रश्न 3: Generic Interfaces अलग से इलाज किया गया है?

(एक noob की तरह लगता है जब इस तरह के बुनियादी सवाल पूछ ... वैसे भी ....)

सभी Thx।

+0

क्योंकि यह केवल आंशिक रूप से एक उत्तर है, मैं इसे यहां छोड़ दूंगा। अपने कोड mySampleIntobj.SampleMethod() में शुरू करने के लिए; और myClassObj.SampleMethod(); दो अलग-अलग तरीकों को बुला सकता है। पहला कॉल कॉल से मेल खाने वाली किसी भी स्पष्ट रूप से लागू विधियों को कॉल करेगा, दूसरा नहीं होगा। केवल उस स्थिति में जहां कोई स्पष्ट विधि मिलान नहीं है, वे उसी विधि को कॉल करेंगे –

+0

क्या यह संकलित करता है? AFAIK, आपके पास (बी) कॉल के लिए सार्वजनिक 'नमूना विधि() 'होना चाहिए। – Humberto

+0

ओह हाँ क्षमा करें .. अब संपादित/सही किया गया :) thx :) – Amitd

उत्तर

2

कोड के उन बिट्स में व्यावहारिक रूप से कोई अंतर नहीं है। दोनों एक ही समारोह को बुलाते हैं। विधि प्रकार के माध्यम से विधि को कॉल करने में मामूली प्रदर्शन लाभ हो सकते हैं।

यदि आप यह चाहते हैं कि इन सामग्रियों को कैसे कार्यान्वित किया जाए, तो Virtual Method Tables पर एक नज़र डालें।

गहरी जानकारी के लिए, this देखें।

+0

वाह दूसरा लिंक समझने के लिए बहुत चुनौतीपूर्ण लगता है :) – Amitd

+0

इसे 10 बार पढ़ने के बाद नहीं। –

+0

इसे तीन बार पढ़ा और अभी भी इसे प्राप्त नहीं कर रहा है :) ..i कोशिश करते रहें;) – Amitd

-5

ऑब्जेक्ट रेफरेंस बनाते समय इंटरफ़ेस का उपयोग करना एक बेहतर अभ्यास माना जाता है, जो कि इसे क्लास प्रकार के साथ सीधे स्थापित करने की तुलना में बेहतर अभ्यास माना जाता है। यह एक इंटरफेस सिद्धांत के लिए प्रोग्रामिंग के तहत आता है।

इसका मतलब है कि आप कंक्रीट क्लास को बदल सकते हैं जो रनटाइम पर समान इंटरफेस लागू करता है जैसे कि निर्भरता इंजेक्शन या यहां तक ​​कि प्रतिबिंब भी हो सकता है। यदि आप कंक्रीट प्रकार के प्रोग्रामिंग की तुलना में इंटरफेस पर प्रोग्राम करते हैं तो आपके कोड को बदलने की आवश्यकता नहीं होगी।

+0

यह एक इंटरफेस के लिए प्रोग्रामिंग की बेहतर व्याख्या प्रतीत होता है http://stackoverflow.com/questions/1848442/what-exactly-is-interface-based-programming – Amitd

+0

अधिकतर सही, लेकिन ऑफ-विषय। सवाल का जवाब नहीं देता है। Downvoted। –

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