2008-11-30 9 views
8

.NET 2.0+ पर जाने के बाद भी सिस्टम का उपयोग करने का कोई कारण है। चयन नामस्थान (विरासत कोड बनाए रखने के अलावा)? क्या जेनेरिक नेमस्पेस हमेशा इसके बजाय इस्तेमाल किया जाना चाहिए?जेनिक्स और सिस्टम। चयन

उत्तर

12

अधिकांश भाग के लिए, सामान्य संग्रह गैर-जेनेरिक समकक्ष से तेज़ी से प्रदर्शन करेंगे और आपको दृढ़ता से टाइप किए गए संग्रह का लाभ प्रदान करेंगे। संग्रह System.Collections और System.Collections.Generic में उपलब्ध की तुलना करना, आप निम्न "प्रवास" मिलती है:

 
    Non-Generic    Generic Equivalent 
    ------------------------------------------------------------ 
    ArrayList     List<T> 
    BitArray     N/A 
    CaseInsensitiveComparer N/A 
    CollectionBase   Collection<T> 
    Comparer     Comparer<T> 
    DictionaryBase   Dictionary<TKey,TValue> 
    Hashtable     Dictionary<TKey,TValue> 
    Queue      Queue<T> 
    ReadOnlyCollectionBase ReadOnlyCollection<T> 
    SortedList    SortedList<TKey,TValue> 
    Stack      Stack<T> 

    DictionaryEntry   KeyValuePair<TKey,TValue> 

    ICollection    N/A (use IEnumerable<T> or anything that extends it) 
    IComparer     IComparer<T> 
    IDictionary    IDictionary<TKey,TValue> 
    IEnumerable    IEnumerable<T> 
    IEnumerator    IEnumerator<T> 
    IEqualityComparer   IEqualityComparer<T> 
    IList      IList<T> 

ICollection (कोई सदस्य संग्रह की सामग्री को बदलने के लिए) ICollection < टी > है, जबकि अपरिवर्तनीय है परिवर्तनशील। इससे इंटरफेस केवल नाम में समान होते हैं जबकि आईसीओलेक्शन और आईनेमेरेबल < टी > बहुत कम से भिन्न होते हैं।

इस सूची से, एकमात्र गैर-जेनेरिक वर्ग जिनके पास सामान्य समकक्ष नहीं है, वे बिटएरे और केसइन्सेंसिव कॉम्पैयर हैं।

+0

KeyedCollection आपके द्वारा संग्रहीत डेटा के आधार पर, शब्दकोशबेस के लिए एक उपयुक्त विकल्प है। –

0

कुछ परिस्थितियों में जेनेरिक कंटेनर पुराने लोगों की तुलना में बेहतर प्रदर्शन करते हैं। उन्हें कम से कम पुराने परिस्थितियों में सभी परिस्थितियों में प्रदर्शन करना चाहिए। और वे प्रोग्रामिंग त्रुटियों को पकड़ने में मदद करते हैं। यह एक अधिक सहायक अमूर्तता और बेहतर प्रदर्शन का एक दुर्लभ संयोजन है, इसलिए उनसे बचने के लिए कोई कारण नहीं है। केवल अगर आपको एक क्रमी लाइब्रेरी द्वारा मजबूर होना पड़ता है तो आपको जेनेरिक से पहले लिखा गया था।

0

मैंने सी # टीम से एंडर्स हेजल्सबर्ग के साथ एक साक्षात्कार देखा और उनसे पूछा गया कि क्या वह कुछ भी था जो उसने .NET की पिछली रिलीज के साथ खेद व्यक्त किया था। एएसपीनेट 1.0 में जेनेरिक नहीं होने वाली पहली बात थी। इसका मतलब यह नहीं था कि उन्हें कामकाज को लागू करना था जो नेट पुस्तकालयों के साथ रहेंगे और जल्द ही विरासत कोड बन जाएंगे।

मैं सिस्टम का कभी भी उपयोग नहीं करता हूं। चयन नामस्थान और उसके कथन से यह सही पथ प्रतीत होता है।

0

केवल बुरी बात मैं जब जेनेरिक्स का उपयोग कर के बारे में सोच सकते हैं के बारे में भिन्नता है, उदाहरण के लिए इसलिए, यदि आप एक List<Person> है और आप एक विधि है कि List<object> आप क्योंकि List<Person> पर कास्ट नहीं कर सकते हैं नहीं किया जा सकता है लेता है करने के लिए इसे पास करना चाहते हैं List<object> सीधे।

यह समस्या .NET 4.0 में हल हो गई है।

संबंधित मुद्दे