2009-10-20 23 views
13

मुझे Dictionary<TKey,TValue> की सभी कार्यक्षमता चाहिए लेकिन मैं इसे Foo<TKey,TValue> के रूप में चाहता हूं।
मुझे ऐसा करने के लिए कैसे जाना चाहिए?
वर्तमान में मैंमैं शब्दकोश से कैसे प्राप्त करूं?

class Foo<TKey,TValue> : Dictionary<TKey, TValue> 
{ 
    /* 
    I'm getting all sorts of errors because I don't know how to 
    overload the constructors of the parent class. 
    */ 
    // overloaded methods and constructors goes here. 

    Foo<TKey,TValue>():base(){} 
    Foo<TKey,TValue>(int capacity):base(capacity){} 

} 

कंस्ट्रक्टर्स और माता पिता के वर्ग के तरीकों ओवरलोड सही तरीका क्या है उपयोग कर रहा हूँ?

नोट: मुझे लगता है कि मैंने 'अधिभार' शब्द का दुरुपयोग किया है कृपया इसे सही करें या सुधार का सुझाव दें।

+1

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

उत्तर

20

आप करीब थे, आपको केवल रचनाकारों के प्रकार पैरामीटर को हटाने की आवश्यकता है।

class Foo<TKey,TValue> : Dictionary<TKey, TValue> 
{ 
    Foo():base(){} 
    Foo(int capacity):base(capacity){} 
} 

किसी विधि को ओवरराइड करने के लिए आप ओवरराइड कीवर्ड का उपयोग कर सकते हैं।

+2

रचनाकारों के भीतर नहीं, नहीं ... वे पहले से ही प्रकार के भीतर हैं, इसलिए वे पहले से ही "पैरामीटर" टाइप पैरामीटर हैं। –

+0

नोप, टीके और टीवीएलू अब कक्षा के हिस्से के रूप में परिभाषित किए गए हैं। आपको प्रत्येक विधि में उन्हें फिर से परिभाषित करने की आवश्यकता नहीं है। –

+0

_and_ उन्हें आम तौर पर सार्वजनिक बनाते हैं। –

13

सीधे आपके प्रश्न का उत्तर नहीं दे रहा है, केवल एक सलाह। मैं शब्दकोश का उत्तराधिकारी नहीं होगा, मैं IDictionary<T,K> लागू करता हूं और एक शब्दकोश जोड़ता हूं। यह सबसे शायद एक बेहतर समाधान है:

class Foo<TKey,TValue> : IDictionary<TKey, TValue> 
{ 

    private Dictionary<TKey, TValue> myDict; 

    // ... 
} 
+0

(+1) यदि आप केवल शब्दकोश का उपयोग करना चाहते हैं लेकिन नाम Foo के साथ उपयोग करना चाहते हैं तो आप क्या सलाह देते हैं? –

+0

आप ऐसा क्यों करेंगे? सी-स्टाइल टाइपपीफ का एक प्रकार? –

+0

यह एक सजावट है (http://en.wikipedia.org/wiki/Decorator_pattern)। संभावित कमी: आपको अपनी कक्षा से मैन्युअल रूप से अपने सदस्य शब्दकोश में प्रत्येक कनेक्शन को लागू करने की आवश्यकता है। –

1

तुम सिर्फ एक ही प्रकार चाहते हैं, लेकिन एक अलग नाम के साथ, आप इसे using उर्फ ​​साथ छोटा कर सकते हैं, तो:

using Foo = System.Collections.Generic.Dictionary<string, string>; 

और फिर

Foo f = new Foo(); 
संबंधित मुद्दे