2012-05-14 13 views
6

से विधियां हैं I Stack<T> पर आधारित एक कस्टम संग्रह बनाने की कोशिश कर रहा हूं। जब मैं Stack<T> पर देखने के दृश्य स्टूडियो में [मेटाडाटा से], यह पता चलता है कि Stack<T> औजार ICollection है, जो इसे की आवश्यकता होगी लागू करने के लिए ICollection के CopyTo(Array array, index) विधि, लेकिन इसके बजाय, यह होने ICollection<T> के रूप में दिखाया गया है की CopyTo(T[] array, index) विधि। क्या कोई समझा सकता है कि यह मामला क्यों है?स्टैक <T> आईसीओलेक्शन लागू करता है, लेकिन आईसीओलेक्शन <T>

मैं एक संग्रह है कि नकल करता Stack<T> बहुत भारी बनाने के लिए कोशिश कर रहा हूँ। जब मैं ICollection को स्टैक करता हूं, तो मुझे CopyTo(Array array, index) विधि का उपयोग करने की आवश्यकता होती है, लेकिन मैं वास्तव में विधि का उपयोग करना चाहता हूं, जैसे Stack<T> करता है। ICollection<T> लागू किए बिना इसे हासिल करने का कोई तरीका है?

+9

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

+1

आप 'ढेर ' की वास्तविक पूरा स्रोत कोड को देखने के लिए नेट परावर्तक कोशिश कर सकते हैं, निजी उपाय अपना सकते हैं। – mellamokb

+0

@ जेफमर्काडो वाह ... मुझे विश्वास नहीं है कि यह इतना आसान था। मैंने हमेशा सोचा कि "स्पष्ट रूप से कार्यान्वित कार्यान्वयन" का अर्थ क्या है। धन्यवाद। –

उत्तर

3

के रूप में दूसरों को लिखा है, आप अपने गैर सामान्य इंटरफ़ेस को पूरा करने के स्पष्ट इंटरफेस कार्यान्वयन का उपयोग कर सकते हैं:

void ICollection.CopyTo(Array array, int arrayIndex) 
{ 
    var arrayOfT = array as T[]; 
    if (arrayOfT == null) 
    throw new InvalidOperationException(); 
    CopyTo(arrayOfT, arrayIndex); // calls your good generic method 
} 
0

मुझे लगता है कि विधि CopyTo(Array array, index) स्पष्ट रूप से कार्यान्वित किया जाता है। इसका मतलब है, यदि आप ऑब्जेक्ट को आईसीओलेक्शन के रूप में देखते हैं तो आप केवल उस विधि को देखेंगे:

var collection = (ICollection)stack; 
collection.CopyTo(array, 0); 
संबंधित मुद्दे