2011-05-21 9 views
30

मैं संपत्ति के लिए सार्वजनिक गेटटर और निजी सेटटर कैसे बना सकता हूं? क्या निम्नलिखित सही है?सी # में समान नाम के साथ सार्वजनिक गेटर और निजी सेटर है?

public String Password 
{ 
    set { this._password = value; } 
} 

private String Password 
{ 
    get { return this._password; } 
} 
+2

आपका टेक्स्ट सार्वजनिक स्ट्रिंग पासवर्ड के लिए पूछता है {प्राप्त करें; निजी सेट} लेकिन आपका कोड सार्वजनिक स्ट्रिंग पासवर्ड {सेट; निजी मिलता है;} उनमें से एक स्पष्ट रूप से गलत है। – Yaur

+0

@Yaur: अच्छी पकड़, मैंने उसे नोटिस नहीं किया। लेकिन कोई भी एक ही वाक्यविन्यास का उपयोग कर काम करेगा। –

उत्तर

69

हाँ, यह संभव है, यहां तक ​​कि ऑटो गुणों के साथ। मैं अक्सर उपयोग करें:

public int MyProperty { get; private set; } 
+0

क्या आप समझा सकते हैं कि यह आदमी आपके उत्तर के बारे में क्या कह रहा है? http: // stackoverflow।कॉम/प्रश्न/10733 9 2/कितनी बार-आप-देखते-दुर्व्यवहार-के-तेज-शॉर्ट-गेटर्स-सेटर्स क्या वह कह रहा है कि यह करने के लिए ठीक नहीं है? मैं उलझन में –

+2

वह प्रश्न और जॉन का जवाब कहता है कि ऐसे मामले हैं जहां यह ठीक नहीं है, विशेष रूप से यदि मूल्य को पढ़ा जाना चाहिए (सीटीआर चलाने के बाद सेट करना संभव नहीं है) तो ऑटो प्रॉपर्टी का उपयोग करना गलत है। किसी भी भाषा सुविधा के साथ दोनों सही और गलत उपयोग हैं। –

+0

धन्यवाद, मैं वास्तव में आपके उत्तर की सराहना करता हूं! –

3
public String Password 
{ 
    private set { this._password = value; } 
    get { return this._password; } 
} 

या आप एक स्वत: लागू किया संपत्ति का उपयोग कर सकते हैं:

public String Password { get; private set; } 
+2

यह दोनों सार्वजनिक अधिकार बनाएगा? मैं केवल गेटटर विधि को कक्षा में ही उपलब्ध करना चाहता हूं, जिसका मतलब निजी है। – BlueBird

+0

कोड का पहला बिट सही नहीं है। यह अनुरोध नहीं करता है कि क्या किया जाता है। दूसरा बिट काम करता है। – Cheeso

+0

मैंने इसे ठीक किया। अब यह सही है। –

2
public String Password 
{ 
    private set { this._password = value; } 
    get { return this._password; } 
} 

MSDN:

हो और सेट तरीकों आम तौर पर हैं नहीं अन्य तरीकों से अलग। वे किसी प्रोग्राम प्रोग्राम को निष्पादित कर सकते हैं, अपवादों को फेंक दें, ओवरराइड हो जाएं, और प्रोग्रामिंग भाषा द्वारा अनुमत किसी भी संशोधक के साथ घोषित किया गया हो।

संपादित करें:

हाँ, गुण कार्यक्रम तर्क करते हैं और अपवाद फेंक कर सकते हैं: MSDN बोली बस स्पष्ट करने के लिए क्यों geter और सेटर विभिन्न पहुँच mdofiers, अच्छा बिंदु @Cody ग्रे द्वारा उठाए गए हो सकता है । लेकिन वे नहीं करना चाहिए। गुण के लिए बहुत हल्के तरीके हैं, फ़ील्ड तक पहुंचने के लिए तुलनीय हैं। प्रोग्रामर को का उपयोग करने की उम्मीद करनी चाहिए क्योंकि वे बिना किसी ध्यान देने योग्य प्रदर्शन प्रभावों के बिना फ़ील्ड करेंगे। इतना भारी प्रोग्राम तर्क दृढ़ता से निराश है। और जब setters अपवाद फेंक कर सकते हैं यदि आवश्यक हो, टिककर खेल लगभग फेंक कभी नहीं करना चाहिए अपवाद

+0

यह दिलचस्प है, हम अलग-अलग वस्तुओं के लिए सही सेट कर सकते हैं? – BlueBird

+0

वास्तव में यदि आप इसके बारे में सोचते हैं तो नहीं - वे अन्य कार्यों से अलग नहीं हैं। – YetAnotherUser

+0

यह कोड संकलित नहीं करता है: आप 'public' को दो बार निर्दिष्ट नहीं कर सकते हैं। – svick

11

हाँ, सी # 2.0 के रूप में, आप गेटर और एक की सेटर के लिए विभिन्न पहुँच स्तर निर्दिष्ट कर सकते हैं संपत्ति।

लेकिन आपके पास वाक्यविन्यास गलत है: आपको उन्हें एक ही संपत्ति के हिस्से के रूप में घोषित करना चाहिए। बस उस व्यक्ति को चिह्नित करें जिसे आप private से प्रतिबंधित करना चाहते हैं। उदाहरण के लिए:

public String Password 
{ 
    private get { return this._password; } 
    set { this._password = value; } 
} 
0

एक 'खुदाई' बैज हासिल करने के लिए, और तारीख तक जवाब बनाने के लिए - केवल-प्राप्त संपत्ति

private readonly int myVal; 
public int MyVal get { return myVal; } 

द्वारा समझाया अब हो सकता है केवल पढ़ने के लिए फ़ील्ड (सी # के रूप में 6.0)

public int MyVal { get; } 
संबंधित मुद्दे