2012-04-28 14 views
15

क्या कक्षा में कोड लिखते समय निजी क्षेत्र या संपत्ति का उपयोग करना अच्छा अभ्यास है?युक्त कक्षा के भीतर, संपत्ति या फ़ील्ड का उपयोग करें?

उदाहरण के लिए, यदि मेरे पास यह फ़ील्ड/प्रॉपर्टी जोड़ी है, के बाहर इस वर्ग को संपत्ति का उपयोग करना होगा। के बारे में कक्षा के अंदर कोड के बारे में क्या? क्या इसे निजी क्षेत्र का उपयोग करना चाहिए, या इसे संपत्ति के माध्यम से भी जाना चाहिए? यहां संपत्ति का उपयोग करने का

private string _foo; 

protected string Foo 
{ 
    get { return this._foo; } 
} 

private void SomeMethod() 
{ 
    string dummyVariable = "snuh" + this._foo; // So, this... 
    string dummyVariable = "snuh" + this.Foo; // ... or this? 
} 

एक लाभ यह है, अगर वहाँ गेटर में किसी भी तर्क है, यह अभी भी निष्पादित हो जाएगा। मुझे यह जानकर उत्सुकता है कि यहां पालन करने के लिए सबसे अच्छी अभ्यास नीति है या नहीं।

+1

मेरा ** राय ** यह है कि इससे कोई फर्क नहीं पड़ता (यह देखते हुए कि आपकी संपत्ति कुछ भी विशेष नहीं करती है) जब तक कि आप सुसंगत हों, लेकिन मुझे उत्सुकता है कि दूसरों को क्या कहना है। – Tung

+0

[संभावित क्षेत्र x संपत्ति के स्थानीय उपयोग पर सर्वोत्तम अभ्यास] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/833047/best-practice-on-local-use-of-private-field-x-property) – Matt

+0

एक नामकरण नोट: आप "चर" शब्द का गलत इस्तेमाल कर रहे हैं। इस मामले में, आपका मतलब "फ़ील्ड" है। –

उत्तर

8

Auto-Implemented properties का उपयोग करते समय, आपके पास कोई विकल्प नहीं है - संपत्ति का उपयोग करें, क्योंकि आपके पास जेनरेट किए गए फ़ील्ड तक कोई पहुंच नहीं है।

यदि आप संपत्ति सरल नहीं है और कुछ अतिरिक्त काम (सत्यापन, फायरिंग इवेंट आदि ...) करते हैं, तो आपको पहुंच और तर्क को केंद्रीकृत करने के लिए संपत्ति को कॉल करना चाहिए।

आप किसी भी अन्य गुण मैं पूछना होगा (कोई तर्क और एक समर्थन क्षेत्र के साथ एक सरल संपत्ति जिसका अर्थ है) है, तो क्यों वे ऊपर से एक नहीं हैं ...

उदाहरण आप दे गए हैं

, यह बनाता है थोड़ा अंतर - आप इनका उपयोग कैसे करते हैं और वास्तव में व्यक्तिगत सौंदर्यशास्त्र और कोडिंग शैली के लिए उबलते हुए यह सुनिश्चित करना अधिक महत्वपूर्ण है।

+1

सरल, गैर-स्वचालित गुणों के लिए दो उपयोग के मामले मेरे दिमाग में आते हैं: गैर-डिफ़ॉल्ट प्रारंभिक मान (सी #) वाले गुण या निजी सेटर (VB.NET) वाले गुण। – Heinzi

+0

@ हिनजी - सच है, और उदाहरण के बारे में मेरे उत्तर का हिस्सा उन पर भी लागू होगा ... – Oded

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