c# - सूची<टी> से विरासत




list inheritance (4)

List<T> से प्राप्त होने वाली एक नई कक्षा को लागू करने का सबसे तेज़ तरीका क्या है?

class Animal {}

class Animals : List<Animal> {} // (1)

एक समस्या का सामना करना पड़ा: बस (1) करके , मैंने पाया है कि मुझे List<T> से किसी भी रचनाकार को विरासत में लाने का लाभ नहीं मिला है।

अंत में, मैं चाहता हूं कि Animals एक List<T> तरह व्यवहार करें List<T> (उदाहरण के लिए, निर्माण किया जा सकता है, लिंक के साथ संगतता)। लेकिन इसके अलावा, मैं भी अपनी खुद की कस्टम विधियों को जोड़ने में सक्षम होना चाहूंगा।


कक्षा के साथ रचनाकारों को विरासत में नहीं मिला है। आपको अपने वांछित रचनाकारों को दोबारा बनाना होगा।

public class AnimalsCollection : List<Animal>
{
     public AnimalsCollection(IEnumerable<Animal> animals) : base(animals) {} 
}

ध्यान रखें कि सूची से विरासत में पूरी तरह से फीचर्ड नहीं है जैसा कि आपको आवश्यकता हो सकती है, बहुत से सदस्य आभासी नहीं हैं इसलिए आधार कार्यान्वयन को कवर करने का एकमात्र तरीका यह है कि इसे new वाक्यविन्यास ( override विपरीत) के साथ छाया करना है।

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

यह आपकी अंतिम आवश्यकताओं पर काफी निर्भर है।


संग्रह प्रारंभिक वाक्यविन्यास का उपयोग करने के लिए List से उत्तराधिकारी होना आवश्यक नहीं है या लिंक एक्सटेंशन विधियों का उपयोग करना आवश्यक नहीं है।

बस IEnumerable और एक Add विधि लागू करें।


List<T> से प्राप्त करने की सलाह नहीं दी जाती है। मुख्य रूप से क्योंकि सूची विस्तार के लिए कभी नहीं थी, लेकिन प्रदर्शन के लिए।

यदि आप अपना खुद का विशिष्ट संग्रह बनाना चाहते हैं, तो आपको Collection<T> से प्राप्त होना चाहिए। आपके मामले में यह होगा:

class Animals : Collection<Animal> {}




collections