2012-04-11 11 views
6

पर कास्ट करें क्या ConcurrentDictionary से IDictionary तक कास्ट थ्रेड-सुरक्षित कार्यान्वयन को काटता है, क्योंकि IDictionary में GetOrAdd और AddOrUpdate विधियां नहीं हैं?ConcurrentDictionary से IDictionary

+0

आपका मतलब "कट", ठीक है? क्या यह इसे 'ConcurrentDictionary' से हटा देता है? नहीं। क्या यह 'IDictionary' इंटरफ़ेस से उपलब्ध है? सं। –

+2

@JamesMichaelHare: उसका मतलब है कि, यदि आप 'IDictionary' पर आते हैं, तो क्या यह परिणामी ऑब्जेक्ट थ्रेड-असुरक्षित बनाता है? दूसरे शब्दों में, क्या यह इसे सामान्य शब्दकोश में बदल देता है? –

+0

क्या यह अभी भी धागा-सुरक्षित होगा? हां, क्योंकि यह उन परिचालनों के बिना हो सकता है। यही है, अगर आपको परमाणु 'GetOrAdd() 'की आवश्यकता है तो आप भाग्य से बाहर होंगे। –

उत्तर

10

परिणामस्वरूप ऑब्जेक्ट अभी भी एक समवर्ती शब्दकोश होगा। जोड़ें या निकालें जैसे अंतर्निहित कार्यान्वयन TryAdd और TryRemove (जो थ्रेड-सुरक्षित हैं) का उपयोग करें। किसी ऑब्जेक्ट को किसी भिन्न प्रकार पर कास्ट करना ऑब्जेक्ट को स्वयं नहीं बदलता है।

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

+0

आप 'IDictionary ' विधियों के ConcurrentDictionary के कार्यान्वयन के लिए एमएसडीएन दस्तावेज को भी देख सकते हैं: http://msdn.microsoft.com/en-us/library/dd287191.aspx – phoog

6

IDictionary सिर्फ एक इंटरफ़ेस है। यदि आप इसे डाले हैं, तो परिणाम ConcurrentDictionary का कार्यान्वयन है, GetOrAdd और AddOrUpdate विधियों को याद कर रहा है।

मुमकिन है, तो आप अभी भी तरीके (GetOrAdd और AddOrUpdate के एवज में) Item संपत्ति और Add और ContainsKey तरीकों का उपयोग कर सकते हैं, और अपने casted वस्तु अभी भी धागा सुरक्षित हो जाएगा (के बाद से अंतर्निहित कार्यान्वयन एक ConcurrentDictionary है)।

1

इंटरफ़ेस कार्यान्वयन को प्रभावित नहीं करता है। यह सिर्फ ConcurrentDictionary के तरीकों का खुलासा नहीं करता है।

आपको इंटरफेस को समझने में this या this उपयोगी हो सकता है।

0

यह IDictionary आकार का ताली लगाने का छेद के माध्यम से बड़ा ConcurrentDictionary वस्तु को देख की तरह हो सकता है - आप केवल IDictionary आकार देख सकते हैं लेकिन यह अभी भी ConcurrentDictionary होगा।

-1

संक्षिप्त उत्तर संख्या।

आप किसी ऑब्जेक्ट के माध्यम से किसी ऑब्जेक्ट में हेरफेर कर रहे हैं और इसलिए अभी भी ठोस कार्यान्वयन का उपयोग कर रहे हैं। आप किसी भी कार्यक्षमता और न ही इसकी विधियों को खो रहे हैं। वे अभी उपलब्ध नहीं हैं।

साइड नोट पर, डाउनकास्टिंग के दौरान आपको एक स्पष्ट कलाकार की आवश्यकता होती है, जब उपेक्षित होने पर स्पष्ट कलाकार की आवश्यकता नहीं होती - हमेशा ऐसा करने के लिए सुरक्षित होता है।

+0

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

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