मैंने इस समस्या का हल ढूंढने के लिए अभी कुछ देखा है। मैंने कई तरीकों को हल किया जो इसे हल कर सकते थे लेकिन ईमानदार होने के लिए मुझे एहसास नहीं हुआ कि किस तरह से इसे "सही" सी # या ओओपी तरीका हल करने का तरीका माना जाएगा। मेरा लक्ष्य न केवल समस्याओं को हल करने के लिए बल्कि कोड मानकों का एक अच्छा सेट विकसित करने के लिए है और मुझे पूरा यकीन है कि इस समस्या को संभालने का एक मानक तरीका है।सी # एक सूची में विभिन्न वर्ग वस्तुओं
मान लें कि मेरे पास अपने संबंधित वर्गों और संचार के तरीकों के साथ 2 प्रकार के प्रिंटर हार्डवेयर हैं: प्रिंटर टाइप 1, प्रिंटर टाइप 2।
मैं बाद में किसी अन्य प्रकार को जोड़ने पर भी सक्षम होना चाहूंगा। अमूर्तता में एक कदम उन लोगों में बहुत आम है। उदाहरण के रूप में उनमें से प्रत्येक को एक स्ट्रिंग भेजना संभव होना चाहिए। दोनों में प्रत्येक वर्ग के लिए अद्वितीय और चर अद्वितीय में चर होते हैं। (उदाहरण के लिए एक COM-port के माध्यम से संचार करता है और इस तरह की एक वस्तु है, जबकि दूसरा टीसीपी के माध्यम से संचार करता है और ऐसी वस्तु है)।
हालांकि मैं उन सभी प्रिंटरों की एक सूची को लागू करना चाहता हूं और सूची के बिना जाने और सभी प्रिंटर पर "भेजें (स्ट्रिंग संदेश)" के रूप में काम करने में सक्षम होना चाहूंगा। मैं "प्रिंटरलिस्ट [0] नाम" जैसे चरों तक पहुंचना चाहूंगा जो दोनों ऑब्जेक्ट्स के लिए समान हैं, हालांकि मैं कुछ स्थानों पर भी ऑब्जेक्ट के लिए विशिष्ट डेटा तक पहुंचना चाहता हूं (उदाहरण के लिए सेटिंग विंडो में वह एप्लिकेशन जहां COM-port नाम एक ऑब्जेक्ट के लिए सेट किया गया है और दूसरे के लिए आईपी/पोर्ट नंबर)।
तो, कम कुछ की तरह में:
आम में:
- नाम
- संदेश()
विशिष्ट PrinterType1 रहे हैं:
- पोर्ट
विशिष्ट PrinterType2 रहे हैं:
- आईपी
और मैं करने के लिए, उदाहरण के लिए,() सभी वस्तुओं पर ध्यान दिए बिना प्रकार और वर्तमान ऑब्जेक्ट की संख्या का भेजें करते कामना करते हैं।
मैंने पॉलिमॉर्फिज्म, जेनेरिक, इंटरफेस और इस तरह के बारे में पढ़ा है, लेकिन मैं जानना चाहता हूं कि यह कैसे मेरी आंखों में बुनियादी है, समस्या आम तौर पर सी # (और/या सामान्य रूप से ओओपी) में निपटाई जाएगी।
मैंने वास्तव में बेस क्लास बनाने की कोशिश की, लेकिन यह मेरे लिए बिल्कुल सही नहीं लग रहा था। उदाहरण के लिए मुझे बेस क्लास में "स्ट्रिंग सेंड (स्ट्रिंग मैसेज)" फ़ंक्शन का कोई उपयोग नहीं है। तो मैं वहां एक को परिभाषित क्यों करूंगा जिसे व्युत्पन्न कक्षाओं में ओवरराइड करने की आवश्यकता है जब मैं पहले कभी भी बेस क्लास में फ़ंक्शन का उपयोग नहीं करता?
मैं किसी भी उत्तर के लिए वास्तव में आभारी हूं। यहां के लोग बहुत जानकार लगते हैं और इस जगह ने मुझे पहले कई समाधान प्रदान किए हैं। अब मेरे पास जवाब देने और वोट देने के लिए एक खाता है।
संपादित करें:
इसके अतिरिक्त, समझाने मैं भी वास्तविक printertype की वस्तुओं का उपयोग करने में सक्षम होना चाहते हैं करने के लिए। उदाहरण के लिए प्रिंटर टाइप 1 में पोर्ट वैरिएबल जो एक सीरियलपोर्ट ऑब्जेक्ट है। मैं इसे एक्सेस करना चाहता हूं: PrinterList[0].Port.Open()
और अंडरलेइंग पोर्ट की कार्यक्षमता की पूरी श्रृंखला तक पहुंच प्राप्त करना चाहूंगा।
foreach (printer in Printers)
printer.Send(message)
मेरा सुझाव है कि आप इस विशिष्ट मामले के लिए जो भी समाधान उपयोग करेंगे, आप ओओपी मौलिक सिद्धांतों के बारे में अच्छी किताब लेते हैं। एक अच्छी किताब भी उदाहरण प्रदान करेगी और मुझे यकीन है कि आप देखेंगे कि आप कब और कैसे पसंद करेंगे भाषा की प्रत्येक सुविधा का उपयोग करें। –
+1। कोड मानकों का एक अच्छा सेट विकसित करना चाहते हैं। –