सी # गुण: निजी क्षेत्र के बिना कस्टम सेट संपत्ति का उपयोग कैसे करें?


93

मैं यह करना चाहता हूँ:

public Name
{
    get;
    set
    {
        dosomething();
        ??? = value
    }
}

क्या ऑटो-जनित निजी क्षेत्र का उपयोग करना संभव है?
या यह आवश्यक है कि मैं इसे इस तरह से लागू करूं:

private string name;
public string Name
{
    get
    {
        return name;
    }
    set
    {
        dosomething();
        name = value
    }
}

2
इस पर इस एसओ सवाल पर बहुत अच्छी चर्चा है: stackoverflow.com/questions/1277018/…
डेविड हॉल

जवाबों:


102

एक बार जब आप गेट्टर या सेटर में कुछ भी कस्टम करना चाहते हैं तो आप ऑटो संपत्तियों का उपयोग नहीं कर सकते।


37

आप कुछ इस तरह की कोशिश कर सकते हैं:

public string Name { get; private set; }
public void SetName(string value)
{
    DoSomething();
    this.Name = value;
}

6
+1 मेरे विचार से यह उत्तर स्वीकृत उत्तर को धिक्कारता है। यह ऑटो गुणों का उपयोग कर रहा है। यह स्पष्ट रूप से निजी के लिए सेटर सेट करता है। यह एक अच्छी बात है क्योंकि इससे अंतिम उपयोगकर्ता या डेवलपर को पता चल जाता है कि सेटर विधि के पीछे और अधिक होने की संभावना है।
ooXei1sh

इसमें और बिल्कुल सेट न होने में क्या अंतर है?
सिद्धिन एस थॉमस

3
@SidhinSThomas private setअपने वर्ग के सदस्यों द्वारा निर्धारित की जाने वाली संपत्ति को प्रदान नहीं करेगा; यह केवल कड़ाई से पढ़ा जाएगा। आप केवल इसका डेटा कंस्ट्रक्टर में सेट कर पाएंगे।
बॉन्डोलिन डे

15

यह नहीं हो सकता। या तो ऑटो कार्यान्वित गुण या कस्टम कोड।


11

C # 7 के रूप में, आप संपत्ति getऔर एक्सेसर्स के लिए अभिव्यक्ति बॉडी परिभाषा का उपयोग कर सकते हैं set

यहाँ और देखें

private string _name;

public string Name
{
    get => _name;
    set
    {
        DoSomething();
        _name = value;
    }
}

4
हालांकि एक निजी क्षेत्र का उपयोग कर रहा है। वास्तव में ओपी की मदद नहीं करता है।
TSmith

जब यह काम करता है, तो यह @TSmith की तरह है, यह वही है जो ओपी चाहता है।
एम। रूइज़

7

यह आवश्यक है कि आप इसे अपने परिदृश्य को पूरी तरह से लागू करते हैं। दोनों getऔर setया तो स्वत: लागू किया या पूरी तरह से, एक साथ लागू किया दो की नहीं एक संयोजन।

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