ग #: गेटटर / सेटर


109

मैंने देखा कि कहीं न कहीं निम्नलिखित है, और सोच रहा था कि इसका क्या मतलब है। मुझे पता है कि वे गेटर्स और सेटर हैं, लेकिन जानना चाहते हैं कि स्ट्रिंग टाइप को इस तरह क्यों परिभाषित किया गया है। मेरी सहायता करने के लिए धन्यवाद।

public string Type { get; set; }


4
इसे एक ऑटो-प्रॉपर्टी कहा जाता है, इस पर एक नज़र डालें: msdn.microsoft.com/en-us/library/bb384054.aspx
Allov

यह नाम की एक संपत्ति की परिभाषा "Type"है System.string। इसमें ज्यादा कुछ नहीं है।
जॉन

2
मुझे लगता है कि वह प्रतिबिंब श्रेणी System.Type के साथ ऑटो-प्रॉपर्टी के नामकरण को भ्रमित कर सकता है। msdn.microsoft.com/en-us/library/system.type.aspx
eandersson

जवाबों:


178

वे ऑटो-इंप्लीमेंटेड प्रॉपर्टीज (शॉर्ट के लिए ऑटो प्रॉपर्टीज) हैं।

कंपाइलर निम्नलिखित सरल कार्यान्वयन के बराबर स्वतः उत्पन्न करेगा:

private string _type;

public string Type
{
    get { return _type; }
    set { _type = value; }
}

2
@barlop किसी के सुराग के साथ Google से आने वाले के रूप में, क्या अद्यतन करने की आवश्यकता है? क्या एम। हसन का जवाब है जो आपका मतलब है? धन्यवाद।
एंथेनोसिटी

1
@ एस्थेनोसिटी इन रिट्रोस्पेक्ट मुझे लगता है कि यह ठीक है .. मैं गेट्टर सेटर के उदाहरणों के बारे में सोच रहा था। प्रश्नकर्ता के पास गेट्टर सेटर का एक वैध मामला है जो कहीं अधिक रसीला है (एक लाइनर / कोई दूसरा क्षेत्र आवश्यक नहीं है) .. आप आवश्यक कोई दूसरा क्षेत्र भी लिख सकते हैं public int b { get { return b * 2; } } । लेकिन मुझे लगता है कि जब आपके पास शरीर के साथ सेटर होता है तो आपको दूसरे क्षेत्र की आवश्यकता होती है। और यह एक शरीर के साथ एक सेटर दिखाता है। हालांकि यह प्रश्नकर्ता के एक लाइनर के समान है।
बारलोप

2
@Aethenosity में c # 7 भी है जिससे निश्चित है कि आपको अभी भी दूसरे क्षेत्र की आवश्यकता है जब सेटर के पास एक बॉडी है, लेकिन इसमें =>सिंटैक्स और नो रिटर्न कीवर्ड है। हालांकि यह मेरे मन में नहीं था। मुझे ध्यान में था कि दूसरा क्षेत्र अनावश्यक है, हालांकि मैंने पाया है कि दूसरा क्षेत्र कभी-कभी आवश्यक होता है। उदाहरण में यहां दूसरा क्षेत्र आवश्यक नहीं है ('क्योंकि कोई बॉडी वाला डिफ़ॉल्ट सेटर ऐसा नहीं करेगा), लेकिन उत्तरकर्ता (सेटर बॉडी और दूसरा फील्ड) में डाल रहा था, प्रश्नकर्ता को यह समझाने के लिए कि उनकी लाइन के बिना क्या है दूसरा क्षेत्र कर रहा था।
बार्लोप

33

यह एक ऑटो-प्रॉपर्टी है और इसके लिए शॉर्टहैंड नोटेशन है:

private string type;
public string Type
{
  get { return this.type; }
  set { this.type = value; }
}

4
... सिवाय इसके कि बैकिंग फ़ील्ड सुलभ नहीं है।
व्लाद

7
... इसीलिए इसे बैकिंग फील्ड कहा जाता है ।
तेमन सोयगुल

5
फिर भी, आपको इसे <Type>k__BackingFieldप्रतिबिंब के रूप में देखने में सक्षम होना चाहिए ।
व्लाद

25

C # 6 में:

अब केवल एक क्षेत्र के रूप में ऑटो-संपत्तियों की घोषणा करना संभव है:

public string FirstName { get; set; } = "Ropert";

पढ़ें- केवल ऑटो-गुण

public string FirstName { get;} = "Ropert";


9

इसका मतलब है कि संकलक रनिंग के समय एक बैकिंग क्षेत्र को परिभाषित करता है। यह ऑटो कार्यान्वित गुणों के लिए सिंटैक्स है।

अधिक जानकारी: स्वतः-कार्यान्वित गुण


5

इसकी स्वचालित रूप से समर्थित संपत्ति, मूल रूप से इसके बराबर है

private string type;
public string Type
{
   get{ return type; }
   set{ type = value; }
}

4

इन्हें ऑटो गुण कहा जाता है।

http://msdn.microsoft.com/en-us/library/bb384054.aspx

कार्यात्मक रूप से (और संकलित आईएल के संदर्भ में), वे बैकिंग फ़ील्ड वाले गुणों के समान हैं।


1
क्या आप अभी भी निजी _type या वर्ग के भीतर टाइप कर सकते हैं, या आप केवल टाइप का उपयोग कर सकते हैं?
माइक

2
नहीं, लेकिन आप ऑटो संपत्ति के लिए संशोधक को निर्दिष्ट कर सकते हैं: सार्वजनिक स्ट्रिंग प्रकार {प्राप्त करें; निजी सेट; }
जेफ

आप इस मामले में _type तक पहुंचने में असमर्थ होंगे।
सिक्योरिटी हाउंड

1
तो उस स्थिति में यह। टाइप = "फू"; ठीक होना चाहिए, लेकिन बाहर से। उदाहरण = "फू"; नहीं होगा .. ये ऑटो प्रॉप्स निश्चित रूप से भाषा के लिए एक उपयोगी जोड़ हैं। धन्यवाद।
मिकी जूल 15'11

1

मुझे पता है कि यह एक पुराना सवाल है लेकिन C # 6 की रिलीज के साथ, आप अब निजी संपत्तियों के लिए कुछ ऐसा कर सकते हैं।

public constructor()
{
   myProp = "some value";
}

public string myProp { get; }

2
आप सीधे C # 6 में प्रारंभिक मूल्य सेट कर सकते हैं: सार्वजनिक स्ट्रिंग myProp {प्राप्त करें; } = "कुछ मूल्य") बिना निर्माता के;
एम। हसन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.