क्या सी # में ऐसा करने का कोई तरीका है?
<पूर्व> निजी शून्य कॉलर () {MyControl c = new MyControl (); कैली (रेफरी सी); // यहाँ मैं सी के रूप में कंट्रोल करना चाहता हूं और रेफरी से पास करना} निजी शून्य Callee (रेफरी नियंत्रण c) {}
जेनेरिक उदाहरण में, यह कैसे समझता है T = myControl? क्या आप समझा सकते हैं? मैं जेनरिक के लिए एक नौसिखिया हूँ
सबसे पहले, मैं सवाल करता हूं कि आप की आवश्यकता रेफरी
- यह असामान्य लगता है; इसका मतलब होगा कि आप पद्धति के भीतर चर को पुनः असाइन करना चाहते हैं? (पारित उदाहरण के बदलते गुणों से भिन्न)।
रेफरी
के लिए, यह एक सटीक मिलान होना चाहिए; आप उपयोग कर सकते हैं:
नियंत्रण tmp = c; कैली (रेफरी टीएमपी); C = (MyControl) टीएमपी;
वैकल्पिक रूप से, जेनेटिक्स पर विचार करें:
निजी शून्य कार्ली & lt; T & gt; (रेफरी टी सी) जहां टी: नियंत्रण {...}
तब आप Callee (ref c)
का उपयोग कर सकते हैं और यह T = MyControl
(अद्यतन पुनः टिप्पणी) का अनुमान लगाएगा < / P>
सामान्य उदाहरण में, हम Callee
को "T" की एक सामान्य विधि के रूप में घोषित करते हैं, जहां टी कम से कम एक नियंत्रण
। यह "कम से कम" यह सुनिश्चित करता है कि हमारे पास अभी भी नियंत्रण
के भीतर सभी तरीकों तक पहुंच हो सकती है (चूंकि नियंत्रण
के किसी भी उप वर्ग में अभी भी वे सदस्य हैं)।
जेनेरिक टेम्पलेट्स की तरह कुछ काम करते हैं (लेकिन काफी नहीं) विधि को कॉल करते समय कॉलर टी निर्दिष्ट करने के लिए मिलता है तो कॉलर Callee & lt; Control & gt; (...)
उपयोग कर सकता है, जो आपके मौजूदा Callee (रेफरी नियंत्रण c)
को कॉल करने के लिए तुलना करेगा। या वे Callee & lt; MyControl & gt; (...)
का उपयोग कर सकते हैं, जो कि Callee (Ref MyControl c) कॉल करने जैसा है
- दोनों ही मामलों में T
विधि भर में प्रतिस्थापित किया जाता है।
हालांकि, सी # संकलक पर्याप्त बुद्धिमान है कि अक्सर इसे बिट को कोण कोष्ठक में बताने की आवश्यकता नहीं है; यह देख सकता है कि आप MyControl
पास कर रहे हैं, तो यह मान जाएगा (जब तक कि आप इसे अन्यथा नहीं बताएं) कि इसका उपयोग T = MyControl
- को सामान्य प्रकार का अनुमान कहा जाता है। यहां का मुद्दा यह है कि यह डेटा के उप वर्गों के साथ रिफ़ कोड> का उपयोग करना आसान बनाता है।
Comments
Post a Comment