मैं उन परिवर्तनों पर पढ़ रहा हूं जो .NET4.5 लाएंगे, और this ब्लॉग पोस्ट पर मैंने कुछ ऐसी चीज पर ठोकर खाई जिसे मैं न जानता था और न ही समझ गया था।सी # भाषा जेनेरिकों को कब्रिस्तान होने से रोकती है जब तक कि उनमें कोई तरीका नहीं है जिसके लिए टी को इनपुट के रूप में आवश्यकता होती है?
जब केवल पढ़ने के लिए संग्रह के कार्यान्वयन के बारे में बात, Immo Landwerth का कहना है:
दुर्भाग्य से, हमारी प्रकार प्रणाली टी covariant के प्रकार बनाने जब तक यह नहीं तरीकों कि एक इनपुट के रूप टी लेते हैं अनुमति नहीं है। इसलिए, हम IReadOnlyList को इंडेक्सऑफ विधि नहीं जोड़ सकते हैं। हम मानते हैं कि यह अल्पसंख्यक के समर्थन के मुकाबले एक छोटा बलिदान है।
मेरी स्पष्ट रूप से समझ सीमित से ऐसा प्रतीत होता है जैसे वह कह रहा है इसी क्रम में एक विधि है कि एक IReadOnlyList<Circle>
में पास करके एक IReadOnlyList<Shape>
की आवश्यकता है कॉल करने के लिए हमें सक्षम करने के लिए, हम एक IReadOnlyList<T>.IndexOf(T someShape)
विधि नहीं हो सकता।
मुझे नहीं पता कि प्रकार प्रणाली इसे कैसे रोकती है। क्या कोई समझा सकता है?
पर्याप्त मेला। मैंने सोचा होगा कि इंडेक्सऑफ सिर्फ -1 लौटाएगा यदि उसे गलत प्रकार मिला है। डुनो मैंने ऐसा क्यों सोचा, कि प्रत्येक विधि में किसी प्रकार की जांच की आवश्यकता होगी। मैं एरिक के ब्लॉग पोस्ट में सही हो जाऊंगा। लड़का लेकिन वह आदमी कुछ समझ सकता है जिस तरह से मैं समझ सकता हूं! –
क्या एक covariant 'IReadOnlyList' लागू हो सकता है 'इंडेक्सऑफ (टीटी इसे)', जहां विधि का पैरामीटर प्रकार संग्रह से स्वतंत्र था। एक वर्ग 'सूची ' अपने 'इंडेक्सऑफ' को कार्यान्वित कर सकता है, फिर प्रत्येक प्रकार के 'टीटी' के लिए आलसी-जेनरेटेड (कैश) प्रतिनिधि का उपयोग कर सकता है, ताकि यदि 'टीआईटीएम 'लागू हो तो' IEquatable । इसके बाद यह एक प्रतिनिधि बन जाएगा स्थैतिक विधि जो इसे कॉल करेगी, और अन्यथा यह एक स्थिर विधि के लिए एक प्रतिनिधि बन जाएगी जो कुछ अन्य तुलनाओं का उपयोग करती है या कुछ प्रकार के संयोजन 'टीटी' और' टी' के लिए, केवल -1 लौटा दी जाती है। –
supercat