2011-03-16 18 views
5

स्वत: गुण .net 3 जो एक 'निजी' क्षेत्र, वैसे भी बनाने के बारे में में भाषा को जोड़ा गया था, कोड का उपयोग: वास्तव में किसी भी प्रकार का प्राप्त करने के लिएपहुँच स्वत: संपत्ति - सी #

public string foo {get;set;} 

क्या यह संभव है इस निजी क्षेत्र का संदर्भ?

मैं

private string _foo = null; 
public string foo{get{_foo==null?_foo="hello"; return _foo;}set{_foo=value;}} 
+6

इससे यह एक स्वचालित संपत्ति नहीं बन जाएगा, है ना? – BoltClock

+1

आप * गेटर * में चेक क्यों जोड़ना चाहते हैं? चेक * सेटटर * में होना चाहिए। – CodesInChaos

+0

आईएमओ आलसी प्रारंभिकता का उपयोग किया जाता है। यदि डिफ़ॉल्ट मान निर्माण करने के लिए जांच है तो इसे केवल निर्माता में असाइन करें। आलसी शुरुआत उन गुणों के लिए अच्छी है जहां डिफ़ॉल्ट मूल्य निर्माण करने के लिए महंगा है और हमेशा उपयोग नहीं किया जाता है। मेरे अनुभव में शायद एक बार सौ संपत्तियों में मामला है। – CodesInChaos

उत्तर

6

The backing field of an automatic property is anonymous की तरह इस स्वत: संपत्ति सुविधा खोने और कुछ लिख बिना की तरह

public string foo {get{/*some code to check foo for nulls etc*/};set;} 

कुछ करना चाहता हूँ; आप इसे अपने गेटर या सेटर के भीतर से नहीं एक्सेस कर सकते हैं।

यदि आपको अपने गेटटर या सेटर में अपना तर्क लागू करने की आवश्यकता है, तो आपकी संपत्ति को अब भी स्वचालित नहीं माना जाता है।

private object _x; 

public object X 
{ 
    get { return _x; } 
    set { _x = value; } 
} 
3

आप एक एक "स्वचालित" हो जाते हैं और एक "मैन्युअल" सेट नहीं हो सकता (:

ऑटो गुण बस वहाँ टाइपिंग की विरक्ति, और देखने का जाला को बचाने के लिए, इनमें से multitudes हैं या एक "मैनुअल" एक "स्वचालित" सेट के साथ मिलता है)। आपके पास "मैन्युअल" या दोनों "स्वचालित" होना चाहिए।

संबंधित मुद्दे