सबसे पहले "एक विधि समूह एक सदस्य लुकअप के परिणामस्वरूप ओवरलोडेड विधियों का एक सेट है"। मेरे उदाहरण में मैं 1 9 ओवरलोड के साथ Console.WriteLine
विधियों के सेट का उपयोग करता हूं।'is' ऑपरेटर के बाएं किनारे पर विधियों को अनुमति क्यों दी जाती है और अभ्यास में इसका उपयोग कैसे किया जा सकता है?
सी # भाषा विशिष्टता में एक विधि समूह की परिभाषा में यह भी कहा गया है: "एक आवेदक-अभिव्यक्ति (§7.6.5), एक प्रतिनिधि-निर्माण-अभिव्यक्ति (§7.6.10.5) में एक विधि समूह की अनुमति है और ।
Action<string> print = (Action<string>)Console.WriteLine;
print("Hello!");
if (Console.WriteLine is Action<string>)
{
Console.WriteLine("We're compatible!");
}
: के रूप में एक के बायीं ओर ऑपरेटर है, और परोक्ष एक संगत प्रतिनिधि प्रकार (§6.6) "में बदला जा सकता
मैं एक परिदृश्य में जहाँ इस कार्यक्षमता उपयोगी हो सकता है के बारे में सोच सकता है
पहली पंक्तियों से पता चलता है कि हम एक विधि समूह '12 'कर सकते हैंएक प्रतिनिधि में। वास्तव में क्या होता है "अंतर्निहित रूपांतरण एक संगत प्रतिनिधि प्रकार में परिवर्तित होता है", जो एक प्रतिनिधि का उदाहरण बनाता है जो संगत हस्ताक्षर वाले Console.WriteLine
विधियों में से एक को ओवरलोड किया गया है।
तो चश्मा के अनुसार हम उपरोक्त वर्णित "बाईं ओर ऑपरेटर" सुविधा का उपयोग कर सकते हैं ताकि यह जांच सके कि विधि समूह किसी दिए गए प्रतिनिधि प्रकार (अंतर्निहित रूपांतरण मौजूद है) के साथ संगत है या नहीं। यह नमूना कोड में 'if' कथन के अंदर चेक किया गया है।
आश्चर्यजनक रूप से, कोड संकलित करता है, लेकिन चेतावनी देता है "दी गई अभिव्यक्ति कभी उपलब्ध नहीं है ('System.Action') प्रकार"। तो ऐसा लगता है कि विधि समूह की संगतता और रनटाइम पर प्रतिनिधि प्रकार की जांच करने का कोई प्रयास नहीं होगा।
इसलिए, मेरे सवालों का:
- क्यों तरीकों समूहों के ऑपरेटर 'है' की जांच कार्यावधि में नहीं किया जा सकता है, तो बाईं ओर मौजूद अनुमति दी जाती है?
- यह निर्माण चेतावनी क्यों देता है, संकलन त्रुटि नहीं?
- क्या 'है' ऑपरेटर के बाईं ओर विधि समूहों का उपयोग करने के कोई व्यावहारिक परिदृश्य हैं?
- क्या यह भविष्य के उपयोगों के लिए आरक्षित है, यानी यह अनुमान लगाया गया है कि ऊपर दिया गया कोड किसी दिन काम करेगा?
@ एरिक लिपर्ट पहले से ही "द सी # प्रोग्रामिंग भाषा" पुस्तक में लिखा है: "यह एक विधि समूह 'है' ऑपरेटर के बाएं हाथ पर कानूनी है, भ्रामक सुविधा है। परिणाम 'है' मूल्यांकन हमेशा 'झूठा 'होगा, भले ही विधि समूह * दाएं हाथ के प्रकार के रूप में परिवर्तनीय है"। Https://books.google.co.il/books?id=s-IH_x6ytuQC&lpg=PT336&ots=ls909TgS6V&pg=PT336#v=onepage&q&f=false – haim770