2010-08-27 9 views
8

यदि मैं कक्षा का सदस्य निजी बनाता हूं, और फिर मैं उस सदस्य को स्वीकार करना चाहता हूं, तो हमें उस सदस्य के लिए सार्वजनिक संपत्ति को परिभाषित करना होगा। लेकिन फिर मुझे आश्चर्य है: यदि हम इसके लिए सार्वजनिक संपत्ति घोषित करके कक्षा के सदस्य का सार्वजनिक रूप से उपयोग कर सकते हैं, तो हम कक्षा के सदस्य को सार्वजनिक रूप से क्यों परिभाषित नहीं करते हैं?सी # में निजी क्षेत्रों के लिए सार्वजनिक संपत्तियों का उपयोग क्यों करें?

+2

आप क्या पूछ रहे हैं? वह (एकल वाक्य) अचूक है। – tster

+0

मैंने इसे संपादित किया है। मुझे लगता है कि यही वह मतलब था। – Timwi

+0

मुझे लगता है कि आखिरी वाक्य "... पहले स्थान पर निजी" को "... पहले सार्वजनिक रूप में" बदला जाना चाहिए। –

उत्तर

2

क्योंकि आप किसी संपत्ति में निर्दिष्ट मान को सत्यापित कर सकते हैं।

+0

यह वास्तव में एक तर्क नहीं है क्योंकि यदि आपको बाद में ऐसा करने की आवश्यकता मिलती है, तो आप फिर भी संपत्ति को पेश कर सकते हैं। – Timwi

+0

@ तिमवी, मुझे लगता है कि एक संपत्ति में एक सदस्य को बदलने से कोड को मजबूर किया जाएगा जो कि .dll के भीतर प्रकार का पुन: उपयोग करने के लिए उपयोग करता है। हालांकि अधिकांश लोगों के लिए यह कोई समस्या नहीं है, अगर आप तीसरे पक्ष की खपत के लिए डीडीएस वितरित कर रहे हैं, तो इससे बचा जाना चाहिए। – tster

+0

हां, लेकिन जैसा कि आपने स्वयं बताया है, यह केवल पुस्तकालयों पर लागू होता है। आपका जवाब यह नहीं बताता है। – Timwi

0

संपत्ति एक्सेसर्स (प्राप्त करें, सेट विधियां) आपको अपना कार्यान्वयन बदलने की अनुमति दें भविष्य है। उदाहरण के लिए, आप बैकिंग फ़ील्ड (निजी श्रेणी के सदस्य) से शुरू कर सकते हैं लेकिन बाद में संपत्ति कुछ गणना का परिणाम बन सकती है। इसके अलावा, संपत्ति वाक्यविन्यास आपको केवल-पढ़ने वाले सदस्यों को रखने की अनुमति देता है - ताकि आप केवल अपनी कक्षा के भीतर मूल्य बदल सकें, दुनिया के बाहर ही इसे पढ़ सकते हैं।

+1

यह तर्क केवल पढ़ने योग्य गुणों के लिए मामला बनाता है - लेकिन पढ़ने/लिखने वाले नहीं। यदि आपको बाद में किसी संपत्ति की आवश्यकता मिलती है क्योंकि यह गणना मूल्य में बदल जाती है, तो भी आप संपत्ति को तब भी पेश कर सकते हैं। – Timwi

13

माइक्रोसॉफ्ट दोहरी संगतता के कारणों के लिए सार्वजनिक क्षेत्रों के स्थान पर सामाजिक गुण के उपयोग की सिफारिश। यह केवल एक मुद्दा है यदि आप एक पुस्तकालय लिख रहे हैं (जो अन्य कार्यक्रमों तक पहुंच जाएगा)।

  • आप
  • किसी और ने एक कार्यक्रम अपने पुस्तकालय का उपयोग करता है और पहुँचता है कि सार्वजनिक क्षेत्र
  • अब आप करना चाहते हैं कि लिखते हैं एक सार्वजनिक क्षेत्र के साथ एक पुस्तकालय बनाने के लिए:

    असल में, इस परिदृश्य की कल्पना अपने क्षेत्र को सार्वजनिक संपत्ति पर बदलें क्योंकि आपको इनपुट मान को सत्यापित करने की आवश्यकता है, या संपत्ति गणना का परिणाम बन गई है, या आप इसे अपवाद फेंकना चाहते हैं क्योंकि यह अप्रचलित है, या जो भी हो।

  • उपयोगकर्ता आपकी लाइब्रेरी को अपग्रेड करने का प्रयास करता है, लेकिन लाइब्रेरी का उपयोग करने वाले प्रोग्राम नहीं।

यह पूरी तरह से कार्यक्रम को तोड़ देगा - यह काम करना बंद कर देगा और केवल क्रैश होगा। हालांकि, अगर क्षेत्र के बजाय आपके पास शुरुआत से ही सार्वजनिक संपत्ति थी, तो आप लाइब्रेरी को स्वैप कर सकते थे।

यह निश्चित रूप से पुस्तकालयों के लिए प्रासंगिक है। अन्य सभी मामलों में, सलाह वास्तव में प्रासंगिक नहीं है और यदि आप चाहें तो फ़ील्ड का उपयोग कर सकते हैं। यदि आपको बाद में पता चलता है कि आपको एक संपत्ति की आवश्यकता है, तो भी आप इसे किसी संपत्ति में बदल सकते हैं और आपका प्रोग्राम अभी भी ठीक संकलित होगा।

+1

बहुत अच्छी व्याख्या। – Hari

0

यहां कुछ कारण हैं कि हम सार्वजनिक क्षेत्रों के बजाय सार्वजनिक गुणों का उपयोग क्यों करते हैं।

  1. आप प्राप्त/सेट तरीकों में और अधिक जटिल कोड लिख सकते हैं, जबकि केवल क्षेत्रों में एक भी मूल्य है।
  2. गुण आपके कोड को "ओओ" बनाता है। व्यक्ति नामक एक वर्ग कहें, हम आसानी से अनुमान लगा सकते हैं कि इसमें संपत्ति है जिसे "नाम" कहा जाता है। लेकिन "नाम" नामक सार्वजनिक क्षेत्र वास्तव में अजीब है।
  3. कुछ विशेषताएँ गुणों के लिए केवल (विशेषता Targets.Property) के लिए काम करती हैं।
0

गुणों का उपयोग करने का कारण बहुत आसान है। आप अपने काम के आधार पर किसी भी बाहरी कार्यक्रम को तोड़ने के बिना कोड के हैंडलिंग को अपने मूल्य को प्राप्त/सेट कर सकते हैं - यह फ़ील्ड के साथ संभव नहीं है।इसके अलावा, गुणों को आभासी के रूप में चिह्नित किया जा सकता है, और इस प्रकार, बच्चों की कक्षाओं द्वारा फिर से परिभाषित किया जा सकता है - फिर भी किसी भी संगतता को तोड़ने के बिना।

संबंधित मुद्दे

 संबंधित मुद्दे