2011-01-19 24 views
5

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

बस एक DogList वर्ग, कि एक सार्वजनिक सूची में कुत्ता वर्ग जानकारी संग्रहीत करता है करने के लिए? मुझे इच्छा पर इसे पुनः प्राप्त करने की अनुमति है?

या सूची मूल कुत्ते वर्ग के भीतर एक स्थिर होना चाहिए? शायद कन्स्ट्रक्टर में, जब भी कोई नया कुत्ता बनाता है, तो कुत्ते को स्थैतिक सूची में डाल दिया जाता है?

संपादित करें: क्षमा करें प्रश्न की एक छोटी याद आ रही है, यहां तक ​​कि संरचना अब तक है, यह सोचकर कि क्या कार्यान्वित करने का एक बेहतर तरीका है।

public class Dog 
{ 
    public string name{get;set;} 
    public int weight { get; set; } 
} 

public class DogFactory //not sure if thats the correct wording 
{ 
    public List<dog> lstDogs = new List<dog>(); 
    public void setDogs() 
    { 
    Animal.Retrieve("Dog"); 
    //will retrieve a list of all dogs, with details, though this is costly to use 
     foreach(Animal.Dog pet in Animal._Dogs) 
     { 
      Dog doggie = new doggie(); 
      doggie.Name = pet.Name; 
      ...etc 
      lstDog.add(doggie); 
     } 
    } 
} 
+3

जब आप कहते हैं कि "कई कुत्ते हो सकते हैं" तो क्या आपका मतलब है 'कक्षा कुत्ते के कई उदाहरण' या 'कई प्रकार के कुत्तों'? – yasouser

+0

क्षमा करें, कक्षा कुत्ते के कई उदाहरण – Spooks

उत्तर

5

कुत्तों की एक सूची बनाने के लिए सबसे आसान तरीका है:

List<Dog>

यह System.Collections.Generic से List<T> वर्ग का उपयोग कर कुत्तों की एक जोरदार टाइप सूची है। हालांकि यह आम तौर पर आवश्यक नहीं है जब तक आप एक सूची कुत्तों की और नहीं कुत्तों खुद को विशेष रूप से गुण जोड़ना चाहते हैं

public class DogList : List<Dog>

: आप इस के एक वर्ग बना सकते हैं।

अद्यतन:

आप आम तौर पर जब List<T> का उपयोग कर एक समर्पित सूची वर्ग बनाने की जरूरत नहीं है। आप अपने डेटा प्राप्त करने के लिए LINQ उपयोग कर रहे हैं तो कोई एक वर्ग है कि से निकला बनाने की आवश्यकता

public class DogService 
{ 
    public List<Dog> GetAllDogs() 
    { 
     var r = new Repository(); // Your data repository 
     return r.Dogs.ToList(); // assuming your repository exposes a 'Dogs query' 
    } 
} 

, आप एक List<T> वापस जाने के लिए ToList() एक्सटेंशन का उपयोग कर सकते हैं,: ज्यादातर मामलों में, आप यह कर सकते हैं List<T>

+0

मुझे पता है कि कुत्तों की सूची कैसे बनाएं, मुझे नहीं पता कि इसे कहां बनाना है, ताकि यह परियोजना में किसी भी वर्ग के लिए पहुंच योग्य हो। मुझे सूची सेट अप करने के लिए एक विधि की आवश्यकता होगी, क्या यह अपनी कक्षा में हो या कुत्ते वर्ग – Spooks

+1

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

+1

पीएस- यहां एकमात्र आवश्यकता यह है कि आपकी परियोजना में 'टी' प्रकार का संदर्भ है, जो भी आप किसी सूची में बनाना चाहते हैं। फिर आप उस प्रकार को समाहित करने के लिए जेनेरिक सूचियों का उपयोग कर सकते हैं और आपको सूची (जोड़ें, सम्मिलित करें, निकालें, आदि) के साथ आने वाली सभी कार्यक्षमताएं प्राप्त करें –

3

खैर, सी # तो जब तक आप बहुत विशिष्ट आवश्यकताओं है मैं एक नया DogList वर्ग के साथ नहीं जाना होगा, पहले से ही एक पूरी तरह से अच्छा List<> वर्ग है। यदि आपको सभी बनाए गए कुत्तों का ट्रैक रखने की आवश्यकता है, तो कुत्ते वर्ग के अंदर एक स्थिर सूची ठीक है। बस सुनिश्चित करें कि यह private रखा गया है और आपके पास कुत्तों को जोड़ने या पुनर्प्राप्त करने के तरीके हैं। बेहतर अभी तक, आपका कुत्ता कारखाना उन्हें आपके लिए सूची में जोड़ सकता है (जिसे अब मैंने देखा है कि आपने स्वयं का उल्लेख किया है)।

+0

कुत्ता कारखाना? क्या इसका मतलब कुत्ते वर्ग के बाहर एक वर्ग है? – Spooks

+0

जरूरी नहीं है, यह कुत्ते वर्ग की एक स्थिर विधि हो सकती है। – Tesserex

1

या सूची को मूल कुत्ते वर्ग के भीतर स्थिर होना चाहिए? शायद निर्माता में, जब कभी कोई व्यक्ति एक नया कुत्ता बनाता है, कुत्ते स्थिर सूची में डाल दिया जाता है?

यह समाधान एकल-थ्रेडेड एप्लिकेशन में काम करेगा, लेकिन यह आपको all the dangers of global variables पर प्रदर्शित करेगा। जब यह एक Dog वर्ग के लिए समझ में सभी कुत्तों किसी भी फोन करने वाले कार्यावधि में निर्माण किया है की एक सूची शामिल होगा:

यह भी एक गरीब अमूर्त * हो सकता है? क्या होगा यदि कॉलर Dog आवंटन आवंटित करता है?

इसके बजाय, कुत्तों की सूची का उपयोग करने वाले कॉलर्स स्पष्ट रूप से इसे बनाने और प्रबंधित करने की ज़िम्मेदारी लेना चाहिए। उन कॉलर्स सूची के लिए उचित जीवनकाल को जानेंगे, वे सूची में जो भी हो, उसे नियंत्रित करने में सक्षम होंगे, साथ ही कोड को पढ़ने वाले किसी भी व्यक्ति को यह स्पष्ट होगा कि यह क्या हो रहा है और कैसे।

* जब तक कि सूची बनाई गई कुत्तों का लॉग न हो।

+0

उत्कृष्ट, बहुत अच्छी तरह से कहा। मुझे नहीं लगता था कि यह समझ में आया। आप जिस तरह से इसे ऊपर बनाते हैं उसे देख सकते हैं (स्पष्ट रूप से कुत्तों का उपयोग नहीं करते हैं, और इसे थोड़ा सा सरल बनाते हैं) – Spooks