2012-08-17 2 views
6

वर्तमान में टीके द्वारा क्रमबद्ध 2-तरफा लुकअप एसोसिएशन जेनेरिक पर काम कर रहा है।सामान्य तरीकों का सशर्त संकलन

public class Assoc<TKey, TValue> 
{ 
    public TKey this[TValue value] { get; } 
    public TValue this[TKey value] { get; } 
} 

लेकिन जाहिर है जब TKey == TValue इस असफल हो जायेगी: कुछ बिंदु पर मैं निम्नलिखित की तरह उपयोग कर सकते है की उम्मीद है।

public class Assoc<TKey, TValue> 
{ 
    [Condition(!(TKey is TValue))] 
    public TKey this[TValue value] { get; } 

    [Condition(!(TKey is TValue))] 
    public TValue this[TKey value] { get; } 

    public TKey Key(TValue value) { get; } 

    public TValue Value(TKey value) { get; } 
} 
+0

जब TKey साथ वर्ग का उपयोग कर == TValue उपयोगी हो सकता है? – casablanca

+0

'सार्वजनिक टीकेई [टीवीएलयू मूल्य] {प्राप्त करें; } 'करो? मैं इस एपीआई के उद्देश्य को समझ नहीं रहा हूं। –

+0

@ कैसाब्लांका, क्या आपने कभी 'शब्दकोश <स्ट्रिंग, स्ट्रिंग>' का उपयोग किया है? ऐसा लगता है कि जेक एक शब्दकोश के समान कुछ करना चाहता है, लेकिन कुंजी और मूल्य दोनों द्वारा सहयोगी खोज के साथ। –

उत्तर

4

नहीं, वहाँ कोई सशर्त जेनेरिक प्रकार के आधार पर compiltation है: जिज्ञासा से बाहर, वहाँ यह करने के लिए एक सशर्त संकलन वाक्य रचना है।

जेनेरिक प्रतिस्थापन रनटाइम पर किए जाते हैं, समय संकलित नहीं करते हैं।

यह .NET जेनेरिक और सी ++ टेम्पलेट्स के बीच अंतरों में से एक है।

जेनिक्स में विशेषज्ञता की अवधारणा नहीं है जो सी ++ टेम्पलेट्स हैं।

http://msdn.microsoft.com/en-us/library/c6cyy67b.aspx

+2

+1। नोट "जेनेरिक रनटाइम पर हल हो जाते हैं, समय संकलित नहीं करते हैं।" बिल्कुल सही नहीं है - जेनेरिक क्लास में संकलन समय विधियों को ठीक से पाया जाना चाहिए (जो सटीक त्रुटि है जेक की कक्षा तब उत्पन्न होती है जब संकलक यह चुनने का प्रयास करता है कि इंडेक्सर के किस संस्करण का उपयोग किया जाना चाहिए)। –

+2

@Alexei के साथ सहमत हैं; इस मुद्दे पर जेनेरिक के रनटाइम व्यवहार से कोई लेना देना नहीं है। यह * पूरी तरह से * विधि अधिभार रिज़ॉल्यूशन का मामला है, जो एक संकलन-समय निर्माण है। विशेष रूप से, समस्या यह है कि बिना क्वालीफायर (जैसे 'जहां टीके: फू' इत्यादि) इन दोनों को कंपाइलर द्वारा 'ऑब्जेक्ट' के रूप में माना जाता है और इस प्रकार सामान्य विधि अधिभार संयोजन संयोजन - जब दो विधियां समान होती हैं पैरामीटर प्रकार (यानी 'ऑब्जेक्ट') - इसमें शामिल है। यह एक * संकलन * समय परिदृश्य है। –