मेरे अन्य जवाब के जवाब में, एरिक स्मिथ सही ढंग से नोट:
"... क्योंकि यह परोक्ष रिसीवर प्रकार पैरामीटर मुक्केबाजी की आवश्यकता होगी ..."। वैसे भी क्या होता है, अगर आप ऐसा कुछ करते हैं: Func f = 5.ToString; जो पूरी तरह से कानूनी है।
इस बारे में सोचने से मुझे एक नया जवाब मिल गया है। इसे आकार के लिए आज़माएं:
सीआईएल स्तर पर, "प्रबंधित सूचक" टाइप करें (टाइप &
) एक रिसीवर पैरामीटर के रूप में, स्ट्रक्चर पर सामान्य "उदाहरण" विधियां लेते हैं। यह आवश्यक है ताकि structs पर उदाहरण विधियां संरचना के क्षेत्रों को असाइन कर सकें। Partition II, Section 13.3 देखें।
इसी तरह, कक्षाओं पर उदाहरण विधियों को "ऑब्जेक्ट रेफरेंस" (O
टाइप करें) एक रिसीवर पैरामीटर के रूप में लें (अंतर यह है कि यह प्रबंधित ढेर के लिए एक सूचक है, और जीसी के लिए ट्रैक किया जाना चाहिए)।
चूंकि दोनों सीआईएल &
एस और O
एस पॉइंटर्स द्वारा कार्यान्वित (और हैं) हो सकते हैं, सब कुछ प्रतिनिधि कार्यान्वयन के लिए हंकी-डोरी है। इस बात पर ध्यान दिए बिना कि कोई प्रतिनिधि एक स्थिर विधि, एक क्लास इंस्टेंस विधि या एक स्ट्रक्चर इवेंट विधि कैप्चर करता है, उसे केवल फ़ंक्शन के पहले तर्क में पॉइंटर को _target
पर पास करना होगा।
लेकिन परिदृश्य हम खंडहरों पर चर्चा कर रहे हैं। पहले तर्क के रूप में int
को लेने वाली एक स्थैतिक विस्तार विधि के लिए int32
(विभाजन III, खंड 1.1.1 देखें) के सीआईएल तर्क की आवश्यकता होती है। यहां वह जगह है जहां चीजें रेल से निकलती हैं। मुझे कोई कारण नहीं दिख रहा है कि यह संभवतः प्रतिनिधियों के कार्यान्वयन के लिए क्यों नहीं हो सकता है कि यह हो रहा है (उदाहरण के लिए, विधिप्राप्ति से जुड़े मेटाडेटा का निरीक्षण करके) और एक थंक उत्सर्जित करें जो अनबॉक्स होगा _target
और इसे पहले तर्क के रूप में पास करें, लेकिन प्रतिनिधियों के लिए स्ट्रक्चर पर शास्त्रीय उदाहरण विधियों के लिए इसकी आवश्यकता नहीं है, क्योंकि वे किसी भी सूचक को की उम्मीद करते हैं और प्रकट नहीं होते हैं (मेरे पहले गलत जवाब में उदाहरण के आधार पर) परिपालित करते रहें। स्पष्ट रूप से प्रश्न में विशिष्ट मान प्रकार आवश्यक थंक की सटीक प्रकृति को नियंत्रित करेगा।
जब तक मैं कार्यान्वयन के लिए और अधिक मौलिक बाधा नहीं खो रहा हूं (मैं कल्पना कर सकता हूं कि यह सत्यापनकर्ता के लिए समस्याएं पैदा करेगा, उदाहरण के लिए), ऐसा लगता है कि इस मामले का समर्थन करने के लिए रनटाइम को विस्तारित करने के लिए उचित मामला बनाया जा सकता है, लेकिन सभी संकेत इस समय की ओर इशारा कर रहे हैं कि रनटाइम की सीमा है और सी # कंपाइलर प्रति से नहीं है।
स्रोत
2009-06-19 07:31:50
क्या आप वाकई CS1113 नहीं हैं? –
यह है; तय की। धन्यवाद – SLaks