2011-01-06 13 views
6

क्या कोई मुझे DictionaryBase और जेनेरिक Dictionary<TKey, TValue> के बीच अंतर बता सकता है, सिवाय इसके कि DictionaryBase एक अमूर्त वर्ग है! उनमें से दोनों दृढ़ता से टाइप किए गए हैं और मैंने कहीं पढ़ा है कि सामान्य वर्ग गैर-जेनेरिक लोगों के प्रदर्शन में बेहतर हैं और उन्हें प्राथमिकता दी जानी चाहिए, तो DictionaryBase का सटीक उपयोग क्या है? दोनों कक्षाएं लगभग समान हैं!शब्दकोशबेस और शब्दकोश के बीच अंतर <Tkey,Tvalue>

मदद किसी भी तरह का सराहना

धन्यवाद

उत्तर

3

डिक्शनरीज गैर सामान्य जेनेरिक इंटरफ़ेस को कार्यान्वित करने वाली बेस क्लास है जबकि शब्दकोश जेनेरिक IDictionary इंटरफ़ेस को लागू करने वाले शब्दकोश का सामान्य संस्करण है। गैर जेनेरिक पर जेनेरिक का उपयोग पसंद किया जाता है।

मुझे लगता है कि यह अधिक उपयोगी होगा When to use generics?

सामान्य संग्रह का उपयोग आम तौर पर की सिफारिश की है, क्योंकि आप एक आधार संग्रह प्रकार से निकाले जाते हैं और विशेष प्रकार के लागू करने के लिए बिना प्रकार सुरक्षा की तत्काल लाभ प्राप्त सदस्य हैं। जेनेरिक संग्रह प्रकार आमतौर पर संबंधित नॉनजेनेरिक संग्रह प्रकारों (और से अधिक प्रकार से बेहतर होते हैं, जो संग्रह तत्व मूल्य प्रकार हैं), जेनेरिक के साथ को बॉक्स करने की आवश्यकता नहीं है तत्वों।

इसके अलावा के माध्यम से जाना, Introduction to Generics

जेनेरिक वर्गों और तरीकों एक तरह से पुनर्प्रयोग, प्रकार की सुरक्षा और दक्षता गठबंधन है कि उनके गैर सामान्य समकक्षों नहीं कर सकता। जेनिक्स का संग्रह अक्सर संग्रह और के साथ किया जाता है जो उन पर काम करते हैं। .NET Framework क्लास लाइब्रेरी का संस्करण 2.0 एक नया नामस्थान, System.Collections.Generic प्रदान करता है, जिसमें कई नए जेनेरिक-आधारित संग्रह वर्ग शामिल हैं। यह अनुशंसित है कि उन सभी एप्लिकेशन को .NET फ्रेमवर्क 2.0 और बाद को लक्षित बड़े गैर सामान्य समकक्षों

+0

दोनों कक्षाएं दृढ़ता से टाइप की गई हैं .. और इंटरफ़ेस से भी प्राप्त की गई हैं। शब्दकोश को छोड़कर सिस्टम में सभी वर्गों को बंद करें। चयन, मुझे लगता है कि टाइप-विशिष्ट नहीं हैं !! तो, अंतर केवल इतना ही रहता है कि वे विभिन्न इंटरफेस से प्राप्त होते हैं और डिक्शनरीबेस एक अमूर्त वर्ग है। – Batrickparry

+0

गैर-जेनेरिक वर्गों में जेनेरिक कक्षाओं के समकक्षों को अप्रचलित नहीं किया जाना चाहिए !!!!! – Batrickparry

+0

जेनेरिक IDictionary गैर जेनेरिक IDictionary का एक सामान्य संस्करण है। जेनेरिक प्रकार सुरक्षा और दक्षता को बढ़ावा देते हैं। –

5

कारण गैर सामान्य संग्रह प्रकार नेट ढांचे में अभी भी काफी हद तक पीछे की ओर संगतता के लिए है किया जाएगा। आम तौर पर जब भी संभव हो, आपको जेनेरिक संग्रह प्रकारों का उपयोग करना चाहिए।

+1

तो, जेनेरिक शब्दकोश की उपस्थिति के कारण शब्दकोशबेस का कोई वास्तविक उपयोग नहीं है !! – Batrickparry

+0

प्रभावी रूप से, हाँ। –

+0

धन्यवाद एडम .. :) – Batrickparry

0

मैं सिर्फ एक पुराने DictionaryBase वर्ग को IXmlSerializable था परिवर्तित समाप्त करने के बजाय का उपयोग नई जेनेरिक संग्रह कक्षाएं जेनेरिक Dictionary(string, string)

सबसे दर्दनाक अंतर यह है कि जेनेरिक Dictionary<string, string> के लिए, जब मैं this[key] को उस कुंजी के लिए कॉल करता हूं जो मौजूद नहीं है, तो मुझे यह बताते हुए एक अपवाद मिलता है कि कुंजी मौजूद नहीं है।

DictionaryBase पर मुझे null पर कोई अपवाद नहीं मिला है। यह मेरे मामले में दर्दनाक था क्योंकि सिस्टम कोड से भरा था जिसने चाबियाँ मान प्राप्त करने से पहले ContainsKey शब्दकोश को चेक नहीं किया था। मुझे लगता है कि मैंने धारावाहिकता के साथ कुछ गड़बड़ कर लिया है, यह मेरे द्वारा और अधिक दर्दनाक बना दिया गया था।

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