मैं बाइटरी धारावाहिक/deserialser लिख रहा हूं ताकि कई ऑब्जेक्ट प्रकारों को बाइट स्ट्रीम से/में परिवर्तित किया जा सके। ऑब्जेक्ट्स ब्लूटूथ या यूएसबी से जुड़े डिवाइस के लिए एपीआई कमांड और उनके संबंधित प्रतिक्रियाओं का प्रतिनिधित्व करते हैं। मैं स्ट्रीम को लिखने/पढ़ने के लिए BinaryWriter
& BinaryReader
का उपयोग कर रहा हूं।जेनेरिक बाइनरी रीडर
धारावाहिक आसान है। क्रमबद्ध करने के लिए उचित गुणों को एक विशेषता के साथ टैग किया गया है जो उस क्रम को निर्दिष्ट करता है जिसमें वे बाइट स्ट्रीम में लिखे जाते हैं। मैं BinaryWriter
की सही Write(...)
विधि चुनकर प्रतिबिंब और अधिभार संकल्प हैंडल का उपयोग करके गुणों के माध्यम से पुन: प्रयास करता हूं।
deserialiser काफी आसान नहीं है। फिर मैं विशेष प्रतिक्रिया वर्ग में उचित के माध्यम से पुन: प्रयास कर सकता हूं कि मैं उन प्रकारों को निर्धारित करने की उम्मीद कर रहा हूं जिन्हें स्ट्रीम से पढ़ने की आवश्यकता है। मुश्किल बिट मुझे पढ़ने के लिए BinaryReader
पर कॉल करने के लिए सही विधि चुन रहा है। मैंने दो दृष्टिकोणों के बारे में सोचा है।
- एक बड़ा स्विच बयान है कि सही
ReadXXXX()
विधि प्रकार के आधार पर कॉल पढ़ने के लिए। - स्ट्रिंग में आवश्यक विधि का नाम बनाने के लिए जिस प्रकार की आवश्यकता है, उसका नाम उपयोग करें, और फिर प्रतिबिंब का उपयोग करके विधि का आह्वान करें।
क्या कोई आसान तरीका है जिसके बारे में मैं सोच नहीं रहा हूं? यह सिर्फ एक शर्म की बात है कि आप अपने इच्छित प्रकार के आधार पर ओवरलोड रिज़ॉल्यूशन नहीं कर सकते हैं।
वास्तव में कुछ अच्छे विकल्प, धन्यवाद। मैं पहले की ओर झुका रहा हूं क्योंकि यह मेरे वर्तमान कोड के साथ बेहतर फिट होगा। आपकी सहायता के लिए धन्यवाद. –