प्रश्न वास्तव में protected
के बारे में अधिक जानकारी नहीं है: मुझे गुणों का उपयोग क्यों करना चाहिए?
propeties मनुष्य/सेटर विधि जोड़े, जो कुछ भी आप एक Name {get{} \ set{}}
विशेष रूप से के रूप में सी # गेटर और सेटर accessors है आप एक GetName() \ SetName()
जोड़ी और इसके विपरीत के साथ कर सकते के साथ एक साथ कर सकते हैं के साथ तार्किक बराबर हैं, तो हम साथ खेल सकते हैं अभिगम्यता भी।
लेकिन, कुछ ऐसे लोग हैं जो महसूस करते हैं कि सार्वजनिक (या संरक्षित) गुण ओओपी परिप्रेक्ष्य से धोखा देने जैसा थोड़ा सा हैं, खासकर यदि संपत्ति जो कुछ करता है वह केवल बैकिंग फ़ील्ड का पर्दाफाश करता है। person.Name = "SWeko"
के बाद ऐसा लगता है कि यह ऑब्जेक्ट की स्थिति को बाहरी रूप से बदलता है, जबकि person.SetName("SWeko")
केवल ऑब्जेक्ट को बताता है कि इसे इसके राज्य को बदलने की आवश्यकता है। और पूरी तरह से सैद्धांतिक दृष्टिकोण से मुझे लगता है कि उन आपत्तियों में योग्यता है।
हालांकि, हम सभी में हाथीदांत टावरों में रहने की लक्जरी नहीं है, इसलिए संपत्तियों की अवधारणा वास्तव में उपयोगी है, क्योंकि यह वास्तविक दुनिया मॉडल के करीब, अधिक पठनीय, कम त्रुटि प्रवण और आईएमएचओ है। यह भी विरोधाभास का एक प्रकार प्रदान करता है, जब मैं कुछ इस तरह लिखना: मैं उम्मीद करते हैं कि पहली पंक्ति एक तेजी से काम, और दुष्प्रभाव नहीं होगा होगा
person.Name = "SWeko";
person.Work();
, जबकि मुझे लगता है कि दूसरी पंक्ति की उम्मीद कुछ और करेंगे, और शायद वस्तु की आंतरिक स्थिति को प्रभावित करेगा।जब मैं गेटटर और सेटर विधि का उपयोग करता हूं, तो ऐसी कोई विकृति तुरंत स्पष्ट नहीं होती है:
person.SetName("SWeko");
person.Work();
दूसरा एक पूरी तरह से मान्य जावा है; इसलिए यदि आप उस तरह सी # कोड देखते हैं, तो सबसे संभावित कारण यह है कि यह एक जावा प्रोग्रामर द्वारा लिखा गया है, जो वास्तव में सी # तक वास्तव में समायोजित नहीं हुआ है। –
आप पहुंच के लिए 'संरक्षित' का उपयोग करते हैं, इसमें गुणों के साथ कुछ भी नहीं है। – leppie