यह हमेशा उचित होता है लेकिन आप जो प्रदर्शित कर रहे हैं उसके पीछे के इरादों पर ध्यान से विचार करें
एक बेहतर सवाल पूछना होगा:
क्यों एक ToString () ओवरराइड करेगा?
ToString () एक ऑब्जेक्ट की स्थिति में विंडो है। आवश्यकता के रूप में राज्य पर जोर । जावा / सी जैसी मजबूत ओओपी भाषाएँ एक कक्षा में सब कुछ एनकैप करके ओओपी मॉडल का दुरुपयोग करती हैं। कल्पना कीजिए कि आप एक ऐसी भाषा में कोडिंग कर रहे हैं जो मजबूत ओओपी मॉडल का पालन नहीं करती है; विचार करें कि क्या आप कक्षा या फ़ंक्शन का उपयोग करेंगे। यदि आप इसे एक फ़ंक्शन (यानी क्रिया, क्रिया) के रूप में उपयोग करेंगे और आंतरिक स्थिति केवल इनपुट / आउटपुट के बीच अस्थायी रूप से बनाए रखी जाती है, तो ToString () मूल्य नहीं जोड़ेगा।
जैसे कि अन्य लोगों ने उल्लेख किया है, यह विचार करना महत्वपूर्ण है कि आप क्या ToString () के साथ आउटपुट करते हैं क्योंकि इसका उपयोग डिबगर या अन्य सिस्टम द्वारा किया जा सकता है।
मुझे किसी ऑब्जेक्ट के --help पैरामीटर के रूप में ToString विधि की कल्पना करना पसंद है। यह छोटा, पठनीय, स्पष्ट और प्रदर्शित करने में आसान होना चाहिए। यह प्रदर्शित करना चाहिए कि वस्तु वह नहीं है जो वह करता है । उस सब को ध्यान में रखकर आइए ...
केस का उपयोग करें - एक टीसीपी पैकेट को पार्स करना:
एक अनुप्रयोग-स्तर-केवल नेटवर्क कैप्चर नहीं है, लेकिन कुछ और अधिक मांस के साथ कुछ जैसे कि एक कैप्चर कैप्चर।
आप केवल टीसीपी परत के लिए ToString () को ओवरलोड करना चाहते हैं ताकि आप कंसोल पर डेटा प्रिंट कर सकें। इसमें क्या शामिल होगा? आप पागल हो सकते हैं और सभी टीसीपी विवरण (यानी टीसीपी जटिल है) को पार्स कर सकते हैं ...
जिसमें शामिल हैं:
- स्रोत पोर्ट
- गंतव्य बंदरगाह
- क्रम संख्या
- आभार संख्या
- डेटा ऑफसेट
- झंडे
- विंडो ऑफ़सेट
- checksum
- तत्काल सूचक
- विकल्प (मैं वहां जाने वाला भी नहीं हूं )
लेकिन क्या आप 100 पैकेट पर TCP.ToString () कॉल कर रहे हैं, तो क्या आप वह सब प्राप्त करना चाहेंगे? बेशक, यह जानकारी अधिभार नहीं होगा। आसान और स्पष्ट विकल्प भी सबसे समझदार है ...
यह देखें कि लोग क्या देखने की उम्मीद करेंगे:
- स्रोत पोर्ट
- गंतव्य बंदरगाह
मैं समझदार आउटपुट पसंद करता हूं जो मनुष्यों के लिए आसान है लेकिन YMMV ।
TCP:[destination:000, source:000]
कुछ भी जटिल नहीं है, आउटपुट मशीनों के लिए पार्स नहीं है (अर्थात जब तक लोग आपके कोड का दुरुपयोग नहीं कर रहे हैं), उद्देश्य उद्देश्य मानव पठनीयता के लिए है।
लेकिन उस रसदार जानकारी के बारे में बाकी जो मैंने पहले बात की थी, क्या वह भी उपयोगी नहीं है? मुझे लगता है कि पहले मिल जाएगा ...
ToString () सभी समय के सबसे मूल्यवान और अप्रयुक्त तरीकों में से एक
दो कारणों से:
- लोग समझ नहीं पा रहे हैं कि ToString () किसके लिए है
- आधार 'ऑब्जेक्ट' क्लास एक और, समान रूप से महत्वपूर्ण, स्ट्रिंग विधि गायब है।
कारण 1 - ToString की उपयोगिता का दुरुपयोग न करें ():
बहुत से लोग किसी वस्तु के सरल स्ट्रिंग प्रतिनिधित्व को खींचने के लिए ToString () का उपयोग करते हैं। सी # मैनुअल भी बताता है:
.NET फ्रेमवर्क .NETस्ट्रिंग एक प्रमुख प्रारूपण विधि है। यह एक वस्तु को उसके स्ट्रिंग प्रतिनिधित्व में परिवर्तित करता है ताकि यह प्रदर्शन के लिए उपयुक्त हो।
प्रदर्शन, आगे की प्रक्रिया नहीं। इसका मतलब यह नहीं है कि ऊपर टीसीपी पैकेट का मेरा अच्छा स्ट्रिंग प्रतिनिधित्व ले लो, और regex :: cringe :: का उपयोग करके स्रोत पोर्ट को खींचें।
चीजों को करने का सही तरीका है, ToString () को सीधे SourcePort प्रॉपर्टी पर कॉल करें (जो कि BTW एक ushort है इसलिए ToString () पहले से ही उपलब्ध होना चाहिए)।
यदि आपको मशीन पार्सिंग के लिए एक जटिल वस्तु की स्थिति को पैकेज करने के लिए कुछ और मजबूत करने की आवश्यकता है, तो आप संरचित क्रमबद्ध रणनीति का उपयोग करके बेहतर होंगे।
सौभाग्य से, ऐसी रणनीतियाँ बहुत आम हैं:
- ISerializable (C #)
- अचार (पायथन)
- JSON (जावास्क्रिप्ट या कोई भी भाषा जो इसे लागू करती है)
- साबुन
- आदि...
नोट: जब तक आप PHP का उपयोग नहीं कर रहे हैं क्योंकि, हर्प-डीआरपी, उसके लिए एक फ़ंक्शन है :: snicker ::
कारण 2 - ToString () पर्याप्त नहीं है:
मुझे अभी तक एक ऐसी भाषा दिखाई दे रही है जो इसे मूल रूप से लागू करती है लेकिन मैंने जंगली में इस दृष्टिकोण की विविधताओं को देखा और उपयोग किया है।
जिनमें से कुछ में शामिल हैं:
- ToVerboseString ()
- ToString (वर्बोज़ सच =)
मूल रूप से, टीसीपी पैकेट के राज्य के बालों की गंदगी को मानव पठनीयता के लिए वर्णित किया जाना चाहिए। टीसीपी के बारे में बात करते हुए 'एक मरे हुए घोड़े की पिटाई' से बचने के लिए मैं # 1 मामले पर उंगली उठाता हूं, जहां मुझे लगता है कि ToString () और ToVerboseString () को कम किया गया है ...
केस का उपयोग करें - सारणी:
यदि आप मुख्य रूप से एक भाषा का उपयोग करते हैं, तो आप शायद उस भाषा के दृष्टिकोण के साथ सहज हैं। मेरे जैसे लोगों के लिए जो विभिन्न भाषाओं के बीच कूदते हैं, विभिन्न दृष्टिकोणों की संख्या परेशान कर सकती है।
यानी, इसने जितनी बार चिड़चिड़ाहट की है, वह संयुक्त रूप से प्रत्येक हिंदू भगवान की उंगलियों के योग से अधिक है।
कर रहे हैं विभिन्न मामलों में जहां भाषाओं आम का उपयोग हैक्स और एक कुछ है कि प्राप्त यह सही । कुछ को फिर से आविष्कार करने की आवश्यकता होती है, कुछ एक उथले डंप करते हैं, दूसरे एक गहरी डंप करते हैं, उनमें से कोई भी उस तरह से काम नहीं करता है जैसे मैं उन्हें पसंद करता हूं ...
मैं जो पूछ रहा हूं वह बहुत ही सरल तरीका है:
print(array.ToString());
आउटपुट: 'एरे [x]' या 'एरे [x] [y]'
जहां x पहले आयाम में वस्तुओं की संख्या है और y दूसरे आयाम में वस्तुओं की संख्या या कुछ मान है जो इंगित करता है कि 2 आयाम दांतेदार है (न्यूनतम / अधिकतम रेंज शायद?)।
तथा:
print(array.ToVerboseString());
सुंदर प्रिंट में पूरे शी-बैंग्स को आउटपुट करता है क्योंकि मैं सुंदर चीजों की सराहना करता हूं।
उम्मीद है, यह एक विषय पर कुछ प्रकाश डालता है जिसने मुझे लंबे समय तक परेशान किया है। बहुत कम से कम मैंने इस जवाब को कम करने के लिए PHPers के लिए थोड़ा ट्रोल-चारा छिड़का।
Console.WriteLine(obj.GetToStringItemsHeadings); Console.WriteLine(obj);
समान या समान डंप किया जाए ।