c# - How is method group overload resolution different to method call overload resolution? -


निम्न कोड संकलित नहीं होता है ( त्रुटि CS0123: 'System.Convert.ToString (object) 'मैच प्रतिनिधि' सिस्टम। कनवर्टर & lt; T, स्ट्रिंग & gt; '):

  वर्ग ए & lt; T & gt; {शून्य विधि (टी ओबीजे) {कनवर्टर & lt; टी, स्ट्रिंग & gt; ToString = कन्वर्ट। टॉस्ट्रिंग; // यह या तो (.NET 4 पर) काम नहीं करता है: कनवर्टर & lt; ऑब्जेक्ट, स्ट्रिंग & gt; ToString2 = कन्वर्ट.ToString; कनवर्टर & lt; टी, स्ट्रिंग & gt; ToString3 = toString2; }}  

हालांकि, यह ऐसा करता है:

  वर्ग ए & lt; T & gt; {शून्य विधि (टी ओजीजे) {// ओ टी है, और कन्वर्ट। टॉस्ट्रिंग (ओ) // स्ट्रिंग कन्वर्ट। टॉस्ट्रिंग (ऑब्जेक्ट ओ) कन्वर्टर & lt; T, string & gt; ToString = o = & gt; (ओ) Convert.ToString; }}  

सी # 4 में, सह / कॉन्ट्रा-वर्जन प्रतिनिधि को एक-दूसरे को सौंपा जा सकता है, और प्रतिनिधियों को सह / कॉन्ट्रा-वेरिएंट तरीके से बनाया जा सकता है, इसलिए ToString ( ऑब्जेक्ट) विधि को कनवर्टर & lt; T, string & gt; के रूप में इस्तेमाल किया जा सकता है, क्योंकि T हमेशा एक object

इसलिए, पहला उदाहरण (विधि समूह अधिभार संकल्प) को केवल एक ही लागू विधि स्ट्रिंग कन्वर्ट करना चाहिए। टॉस्ट्रिंग (ऑब्जेक्ट ओ) , विधि कॉल अधिभार के समान संकल्प। विधि समूह & amp; amp; विधि कॉल अधिभार संकल्प अलग परिणाम का उत्पादन?

यह तथ्य के साथ क्या करना है कि विचरण लागू नहीं है मान प्रकार, इसलिए यदि आप T जैसे को प्रतिबंधित करते हैं, तो टी: वर्ग आपको T पर विचरण मिलता है और कोड का पहला स्निपेट संकलित होगा।

से:

विचरण केवल तभी समर्थित है यदि कोई प्रकार पैरामीटर संदर्भ प्रकार है। वैरिएस मान प्रकारों के लिए समर्थित नहीं है।


Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -