मैं अप्रत्यक्ष रूप से किसी वर्ग के सदस्यों तक पहुंचने के लिए इंटरफ़ेस प्रदान करने के कई लाभों को समझता हूं। कुछ तुम सिर्फ (की तर्ज पर कुछ)हम सादे पुराने प्राप्त/सेट फ़ंक्शंस के बजाय .NET गुणों का उपयोग क्यों करते हैं?
public int NormalClass::getQuality() {
return this->quality;
}
और
protected void NormalClass::setQuality(int q) {
this->quality = q;
}
उपयोग कर किसी भी OO भाषा के बारे में में पूरा कर सकते हैं कि पहले से ही नहीं है: मेरा प्रश्न है?
सरासर सौंदर्यशास्त्र से परे, .NET गुणों के अतिरिक्त लाभ क्या हैं?
यदि आप इसके लिए एक आकर्षक तर्क दे सकते हैं तो मैं "पठनीयता" स्वीकार करूंगा; लेकिन व्यक्तिगत रूप से, मुझे लगता है कि एक गेट/सेट फ़ंक्शन किसी संपत्ति की तुलना में अधिक पठनीय है क्योंकि यह सीधे फ़ंक्शन है जो सीधे-सीधे मान के विपरीत है।
संपादित करें: उत्तर देने के लिए सभी को धन्यवाद! यह मेरे लिए वास्तव में जानकारीपूर्ण रहा है; योग करने के लिए मैं क्या एकत्रित की हैं/सब से सीखा कहा गया है कि, निम्नलिखित कुछ निष्कर्ष मैं अब तक पहुँच गए हैं:
- गुण का सबसे बड़ा लाभ संपत्तियों की विशिष्ट सुविधाओं से नहीं आते स्वयं, लेकिन फ्रेमवर्क और आईडीई सुविधाओं से जो एक विशेष तरीके से गुणों को संभालते हैं; उदा।, गुण संपादक, एक्सएमएल क्रमबद्धता, डेटा बाइंडिंग।
- गुण कुछ सुविधाजनक तरीके कि नहीं कर सकते हैं मिल/सेट कार्यों में के रूप में सरल मूल्यों इलाज किया जा सकता: , विशेष रूप से obj.Prop ++ और obj.Prop = मूल्य में।
- गुण आप दूर त्वरित और गंदी कोड सार्वजनिक सदस्यों का उपयोग कर के साथ के माध्यम से एक गुच्छा प्राप्त/सेट बाद में कार्यों की को लागू करने के सिरदर्द जाए बिना मिलता है; यदि आप को कुछ तर्क और/या सार्वजनिक सदस्य निजी, जोड़ने की आवश्यकता हो, तो आप बस एक संपत्ति पेश कर सकते हैं और किसी पुराने कोड को तोड़ने का जोखिम नहीं उठा सकते हैं।
अब, वहाँ एक मुद्दा यह है कि 2 या जवाब में से 3 में बनाया गया है अब तक कि मैं व्यक्तिगत रूप कुछ हद तक संदिग्ध लगता है: कि गुण सस्ती पढ़ें/लिखें संचालन मतलब है और इसलिए अनिवार्य रूप से एक ही तरह के रूप में इस्तेमाल किया जा सकता सरल चर इस बिंदु के साथ मेरा मुद्दा यह है कि गुणों में अंतर्निहित कुछ भी नहीं है जो वास्तव में इसे लागू करता है; यह बस उपयोग करने के लिए माना जाता है। मेरे लिए, यह "चाहिएबीप्रेटेट" क्वालीफायर के समान है जो मानता है कि को केवल अपनी कक्षा से ही एक्सेस किया जाना चाहिए, लेकिन जिसे अभी भी बाहरी रूप से एक्सेस किया जा सकता है; या एक पुलिस बल जो सड़कों पर गश्त करता है हमें याद दिलाने के लिए कि हम खुद से व्यवहार करना चाहिए, लेकिन जब हम अपराध करना शुरू करते हैं तो वास्तव में हस्तक्षेप नहीं करते हैं (यदि यह लागू नहीं होता है, तो यह वास्तव में हमारे लिए क्या कर रहा है?)।
यदि इस संपत्ति के पास कुछ लिखने/लिखने की सस्तीता सुनिश्चित करने के लिए अंतर्निहित तंत्र था, तो मैं इस बिंदु से अधिक प्रभावित होगा।
... सिर्फ इसलिए कि आप कर सकते हैं, hehe –
"यदि गुण पढ़ा सुनिश्चित/घटियापन लिखने के लिए निर्मित तंत्र के कुछ प्रकार था" - इस तरह की और कहा, "यह अच्छा होगा यदि [अपने पसंदीदा जीयूआई की तरह है ढांचे] में यह सुनिश्चित करने के लिए कुछ प्रकार के अंतर्निर्मित तंत्र थे कि लोग खराब यूआई नहीं लिखते हैं "। हां, इसके लिए एकमात्र तंत्र "प्रोग्रामर" कहा जाता है। (या डिजाइनर, या उपयोगिता अध्ययन, या जो भी हो।) कंपाइलर आपकी मदद कर सकता है, लेकिन आपको खराब कोड लिखने के लिए कुछ ज़िम्मेदारी लेनी होगी। –
जो, मुझे लगता है कि यह अनिवार्य रूप से मेरा मुद्दा है: कि प्रतियों का उपयोग करके सस्ती पढ़ने/लिखने की गारंटी नहीं दी जा सकती है। यह प्रोग्रामर की ज़िम्मेदारी है। मैं इस बात पर बहस नहीं कर रहा हूं कि ढांचे के लिए तेजी से पहुंचने वाले गुणों को लागू करने के लिए एक कठोर, अनुमोदित दृष्टिकोण होना ढांचा के लिए एक अच्छा विचार है; बल्कि, मैं उन उत्तरों पर सवाल उठा रहा हूं जिन्होंने गुणों के इस वास्तविक तथ्य को कार्यात्मक लाभ के रूप में इंगित किया है, जैसे कि यह कुछ विशेष विशेषता है। .NET डेवलपर्स ने प्रदान करने के लिए कड़ी मेहनत की है। –