1: यह एक साधारण संपत्ति है, और इसका उपयोग सार्वजनिक क्षेत्र के समान ही किया जा सकता है। यदि आपके पास get
और set
अन्य उपयोगकर्ताओं (यानी, अन्य कक्षाओं) के संचालन का खुलासा करने का कोई कारण है और आपको कुछ भी कल्पना की आवश्यकता नहीं है, तो यह है। यह भी साथ "स्वत: गुण" लिखा जा सकता है,
public static bool isInitialEditMapPageLoad {get;set;} // behaves just like example 1
ऑटो रंगमंच की सामग्री ज्यादा लिखने के लिए तेजी से कर रहे हैं और मेरी राय में बहुत पूर्ण घोषणा की तुलना में अधिक पढ़े जाने योग्य हैं (अगर मैं एक समर्थन क्षेत्र के साथ एक पूर्ण घोषणा को देखते हैं, मुझे कुछ जटिलता मिलती है)।
2: यह गुणों के कारणों में से एक दिखाता है: कुछ तर्क का उपयोग करके मूल्य को वापस करने के बजाय हमेशा मूल्य वापस करने के लिए। कोई भी इस मूल्य को सेट कर सकता है क्योंकि जब भी वे चाहते हैं तो सार्वजनिक क्षेत्र होगा। वे जब भी चाहें मूल्य प्राप्त कर सकते हैं, साथ ही, false
चेतावनी के साथ या तो यह प्रारंभिक लोड नहीं है या उपयोगकर्ता अधिकृत नहीं है - यानी, कुछ (सरल) तर्क मूल्य लौटने से पहले किया जाता है।
3: यह केवल पढ़ने के लिए सार्वजनिक क्षेत्र के रूप में व्यवहार करता है - कोई भी मूल्य पुनर्प्राप्त कर सकता है, लेकिन इसे सेट नहीं कर सकता है। यह संक्षेप में एक मान है जो केवल बाहरी कोड को पढ़ा जाता है (readonly
कीवर्ड से भ्रमित नहीं होना चाहिए)
4: मेरे लिए संकलन त्रुटि में परिणाम हुआ। यह मानते हुए कि एक विधि घोषणा माना जाता है, मैन्युअल रूप से एक गेटर को परिभाषित करना जैसे कि जावा में किया जाएगा, तो यह उदाहरण 3 के समान है।मेरा मानना है कि ऐसे अन्य मुद्दे हैं जो इसे समान नहीं बनाते हैं, जैसे कि आप इसे निर्भरता संपत्ति में बदलना चाहते हैं, दुर्भाग्यवश उस क्षेत्र में मेरा ज्ञान कम हो गया है।
==========
एक सामान्य नियम के रूप में, उपयोगकर्ता गुण अपनी कक्षा डेटा तक पहुँच को सीमित करने के लिए। एक सिद्धांत के रूप में, जो कुछ भी आप दूसरे कोड को स्पर्श करने की अनुमति देने से रोक सकते हैं, उसे इस तरह रखा जाना चाहिए। एक व्यावहारिक मामले के रूप में, आप कक्षाओं पर मूल्यों को प्रदर्शित करने में सक्षम होना चाहते हैं ताकि वे प्रदर्शित किए जा सकें, डेटा प्रदर्शित किए गए डेटा को संशोधित कर सकें, और कैटर। इस बातचीत के अधिकतम नियंत्रण को बनाए रखने के लिए गुणों का उपयोग करें।
यदि अन्य कक्षाओं को आपकी कक्षा में कुछ देखने की आवश्यकता होगी, तो आपको एक गेटर का पर्दाफाश करने की आवश्यकता होगी, लेकिन एक सेटटर नहीं। यह फ़ील्ड के साथ संभव नहीं है, जब तक आप एक कस्टम गेटर विधि लिखने की जावा विधि का उपयोग नहीं करते। वे आपको डेटा लौटने या सेट करने से पहले गणना या सत्यापन करने की अनुमति भी देते हैं। उदाहरण के लिए, यदि आपके पास कुछ पूर्णांक मान है जो आपके setter
में कुछ सीमा के भीतर होना चाहिए (एक सीमा जो आपकी ऑब्जेक्ट की स्थिति के आधार पर बदल सकती है), तो आप यह सुनिश्चित करने के लिए जांच सकते हैं कि यह स्थिति वास्तव में आपके मूल्य को अपडेट करने से पहले मिलती है ।
बस एक ऑटोप्रॉप के रूप में सब कुछ सेट करने के जाल से बचने की कोशिश करें - यह सब कुछ सार्वजनिक क्षेत्र बनाने से अलग नहीं है। सब कुछ यथासंभव निजी रखें। जब तक आवश्यक हो, कोई गेटर्स नहीं, जब तक आवश्यक हो, कोई सेटर्स नहीं, और यदि उपयुक्त हो तो इसे स्वीकार करने से पहले इनपुट को सत्यापित करने के लिए सेटर्स को कोई छोटा तर्क करना चाहिए। उस ने कहा, अन्य जाल से बचें: गेटर्स/सेटर्स में बहुत सारे कोड डालें। यदि यह कुछ हद तक लाइनों से अधिक लेता है, तो आपको शायद संपत्ति के बजाय एक विधि बनाना चाहिए, क्योंकि यह आपके कोड का उपयोग करके दूसरों को अधिक संकेत देता है कि कुछ बड़ा होने वाला है।
उदाहरण 2 आपके पास एक स्टैक ओवरफ्लो त्रुटि है;) और उदाहरण 4 गलत है – Gregoire
संभावित डुप्लिकेट [सी # - कार्यों के बजाय गुणों का उपयोग कब करें] (http://stackoverflow.com/questions/1374273/c-when-to -उज-गुण-बदले में-फ़ंक्शंस), कई लोगों के बीच। – Rob
उसे नहीं देखा .. अच्छा पकड़ो। – David