यहाँ गुणों और मेरे प्रतिवाद के लिए कुछ तर्क दिए गए हैं:
गेट्टर और सेटर विधियों को लिखने की तुलना में उपयोग करने में आसान
गेट्टर और सेटर विधि जोड़े एक कोड गंध हैं। इनको लिखना आसान बना देता है, जैसे कि एक स्क्रैनट्रॉन फॉर्म का उपयोग करके गणित की परीक्षा को विफल करना और सभी 'सी' को भरना आसान बना देता है। जिन वस्तुओं में केवल स्थिति होती है, दृढ़ता के लिए, गेटर्स / सेटर का उपयोग नहीं किया जाना चाहिए और दृढ़ता के समय अपरिवर्तनीय वस्तुओं का निर्माण करना चाहिए।
किसी वस्तु के उपभोक्ता के लिए जो महत्वपूर्ण है वह वह करता है, न कि वह कैसे करता है। इसका व्यवहार यह है कि यह क्या करता है; इसकी स्थिति यह है कि यह कैसे करता है। यदि आप अपने आप को एक वस्तु की स्थिति के बारे में देखभाल करते हुए पाते हैं (दृढ़ता के अलावा, हालांकि यह भी ओओ को तोड़ता है), तो आप बस ओओपी नहीं कर रहे हैं और इसके फायदे खो रहे हैं।
वे उपभोक्ताओं को प्रदर्शन का एक मोटा संकेत देते हैं
यह ऐसी चीज है जो भविष्य में किसी भी संपत्ति के लिए बदल सकती है। मान लें कि 1.0 रिलीज में, प्रॉपर्टी एक्सेस करने से केवल एक क्षेत्र मिलता है। 1.5 रिलीज में, यदि फ़ील्ड शून्य है, तो एक नया नल ऑब्जेक्ट बनाने के लिए PropertyX नल ऑब्जेक्ट पैटर्न का उपयोग करता है। 2.0 रिलीज़ होने पर, प्रॉपर्टीएक्स में गेट्टर विधि द्वारा क्षेत्र को और अधिक मान्य किया जा रहा है।
जैसा कि संपत्ति अधिक से अधिक जटिल हो जाती है, संपत्ति का उपयोग करने का प्रदर्शन संकेत कम और कम सच लगता है।
वे सार्वजनिक क्षेत्रों से बेहतर हैं
यह सच है। लेकिन तरीके हैं।
वे एक विधि की तुलना में किसी वस्तु के मूलभूत रूप से भिन्न पहलू का प्रतिनिधित्व करते हैं, और वस्तु के सभी उपभोक्ताओं को इस बारे में ध्यान देना चाहिए
क्या आप सुनिश्चित हैं कि उपरोक्त दोनों कथन सत्य हैं?
उन्हें टाइप करना आसान है, यार
ज़रूर, टाइपिंग myObject.Length
की तुलना में टाइपिंग आसान है myObject.Length()
, लेकिन क्या थोड़ी सी भी चीनी के साथ तय नहीं किया जा सकता है?
गुणों के बजाय तरीकों का उपयोग क्यों करें?
कोई प्रदर्शन की गारंटी नहीं है। विधि अधिक जटिल होने पर भी API सत्य रहेगा। उपभोक्ता को अपने कोड को प्रोफाइल करने की आवश्यकता होगी यदि वे प्रदर्शन के मुद्दों पर चल रहे हैं, और वर्ड-ऑफ-एपीआई पर भरोसा नहीं करते हैं।
उपभोक्ता के लिए सोचने के लिए कम। क्या इस संपत्ति में एक सेटर है? यकीन है कि एक विधि नहीं है।
उपभोक्ता एक उचित ओओपी मानसिकता से सोच रहा है। एक एपीआई के उपभोक्ता के रूप में, मैं एक वस्तु के व्यवहार के साथ बातचीत करने में दिलचस्पी रखता हूं। जब मैं एपीआई में गुण देखता हूं, तो यह बहुत कुछ राज्य जैसा दिखता है। वास्तव में, यदि संपत्तियाँ बहुत अधिक होती हैं, तो उन्हें गुण भी नहीं होने चाहिए, इसलिए वास्तव में, API में गुण ऐसे होते हैं जैसे वे उपभोक्ताओं को दिखाई देते हैं।
एपीआई के प्रोग्रामर रिटर्न मानों के साथ तरीकों के बारे में अधिक गहराई से सोचेंगे, और यदि संभव हो तो ऐसे तरीकों में ऑब्जेक्ट की स्थिति को संशोधित करने से बचें। जहाँ भी संभव हो, प्रश्नों से आदेशों का पृथक्करण लागू किया जाना चाहिए।
तो मैं आपसे पूछता हूं, तरीकों के बजाय गुणों का उपयोग क्यों करें? MSDN के अधिकांश पॉइंट्स में और अपने आप में कोड की महक होती है, और दोनों में से कोई भी गुण या विधि नहीं होती है।
(ये विचार CQS के बारे में सोचने के बाद मेरे पास आए।)
type GetFoo() void SetFoo()
दस हज़ार बार लिख चुके हैं तो यह सही समझ में आता है। मेरे सभी समय में C # कोड लिखने से मैं कभी भी किसी संपत्ति से भ्रमित नहीं हुआ।