2011-05-25 15 views
11

के लिए एक सामान्य चर के बजाय एक निजी ऑटो प्रॉपर्टी का उपयोग करना एक सहकर्मी के साथ एक चर्चा में, यह लाया गया था कि हमें सभी वर्ग स्तर चर के लिए ऑटो गुणों का उपयोग करने पर विचार करना चाहिए ... निजी सहित।प्रोग्रामिंग मानक

तो इसलिए की तरह एक सार्वजनिक संपत्ति के अलावा:

public int MyProperty1 { get; set; } 

हमारी निजी वर्ग स्तरीय चर इस प्रकार दिखाई देगा:

private int MyProperty2 { get; set; } 

के बजाय:

private int _myProperty2; 

मैं मैं इस बारे में बाड़ पर हूं कि कोई ऐसा क्यों करना चाहेगा लेकिन मैं यह तय नहीं कर सकता कि यह स्वीकार करने की मेरी अनिच्छा मेरे कारण है मैं अपने कोड को उसी प्रोग्रामिंग मानकों और नामकरण सम्मेलनों में कैसे लिखता हूं, जिसका उपयोग मैंने 10 वर्षों तक किया है या क्योंकि मैंने इसे पहले कभी नहीं देखा है (किसी कारण से)।

मुझे एहसास है कि यह टाइप करने के लिए अतिरिक्त कोड है लेकिन ईमानदार होने के लिए, ऑटो-प्रॉपर्टी का उपयोग करते समय, मुझे नहीं लगता कि मैंने इसे 'प्रोप' और 'प्रोप' स्निपेट के कारण कभी भी टाइप किया है, इसलिए यह होगा एक निजी ऑटो प्रॉपर्टी बनाने के लिए एक नया स्निपेट स्थापित करना बहुत आसान है, इसलिए अतिरिक्त कोड मुझे बहुत परेशान नहीं करता है क्योंकि मुझे इसे कभी टाइप नहीं करना पड़ता है।

सौंदर्यशास्त्र के अलावा जो कि मेरा अवचेतन हो सकता है, क्या कोई समस्या है जो पूरी तरह से निजी ऑटो गुणों का उपयोग करने से हो सकती है? क्या ऐसा करने के लिए कोई अच्छा कारण है या नहीं? मैंने अपने दिन में स्टैक ओवरफ्लो, कोडप्लेक्स, कोडप्रोजेक्ट इत्यादि पर बहुत सारे कोड देखे हैं और मैंने कभी भी इस मानक का उपयोग नहीं देखा है .... क्या कोई कारण है?

+0

की अपनी लाइन को कम कर देता जा सकते हैं आपके पास जो कुछ है, उसे रखना बेहतर है, इससे यह पता चलता है कि निजी क्या है, और कोड को देखकर सार्वजनिक क्या है। – MBen

+0

संभावित डुप्लिकेट [आंतरिक रूप से गुणों का उपयोग करने के क्या फायदे हैं?] (Http://stackoverflow.com/questions/2884715/what-are-the-benefits-of-using-properties- अंततः) – nawfal

उत्तर

7

यह बहुत अधिक समझ में नहीं आता है।

मैं एक 'लाभ' के बारे में सोच सकते हैं:

  • आप बाद में गेटर के लिए तर्क जोड़ सकते हैं और/या सेटर और यकीन है कि यह हमेशा

लेकिन पारित हो जाता है हो सकता है स्पष्ट रूप से अपनी कक्षाओं नहीं करना चाहिए इतना बड़ा हो गया कि यह उपयोगी है।

"क्या कोई समस्या है"?

आपकी संपत्ति ref या out पैरामीटर के तर्क के रूप में काम नहीं करेगी।

+0

देखें लेकिन बाद में तर्क जोड़ने के लिए संपत्ति को वापस करने के लिए एक निजी सदस्य बनाना आवश्यक है ... और आप वास्तव में गारंटी नहीं दे सकते कि अन्य कोड सीधे उस सदस्य तक नहीं पहुंच पाएंगे –

+0

@Robert : सत्य लेकिन तर्क जोड़ने के बिंदु पर आप जानते हैं कि यह मौजूदा कोड द्वारा ठीक से उपयोग किया जाएगा। बस इतना ही। –

+1

मौजूदा कोड, हाँ। भविष्य कोड, नहीं। –

9

निजी ऑटो-गुण पूरी तरह से व्यर्थ हैं, मेरी राय में। एक निजी ऑटो-प्रॉपर्टी क्या मूल्य प्रदान करती है कि एक सादा क्षेत्र नहीं है?

(यह अलग है जब ऑटो-प्रॉपर्टी केवल आंशिक रूप से निजी है - उदाहरण के लिए, एक निजी सेटर के साथ एक सार्वजनिक/संरक्षित गेटर - या जब आप एक निजी गैर-स्वचालित संपत्ति का उपयोग करते हैं ताकि आप अतिरिक्त कोड लपेट सकें गेटटर/सेटर के आसपास।)

3

यह प्रकाशन के लिए निजी के लिए लगभग उतना उपयोगी नहीं है।

मान लीजिए कि आपके स्वत: निजी संपत्ति ले लिया और बाद में इसे (जो कुछ भी तोड़ने के बिना ऑटो रंगमंच की सामग्री के पूरे मुद्दे है ऐसा करने में सक्षम किया जा रहा है) में कुछ तर्क बनाया ...

यह एक निजी बनाने के लिए आप की आवश्यकता होगी संपत्ति के लिए लपेटने के लिए समर्थन सदस्य।

तो अब आपके पास एक ही काम करने के दो अलग-अलग निजी तरीके (सदस्य और संपत्ति) हैं, हालांकि किसी के पास छिपे साइड इफेक्ट्स (संपत्ति) हैं और अब आपको अपनी अन्य विधियों को सुनिश्चित करने की समस्या भी मिली है वर्ग में उस सदस्य को सीधे एक्सेस करें।

शुरुआत से ही एक निजी सदस्य का उपयोग करने से अधिक सिरदर्द होने का अंत हो जाता है।

+0

यदि मैं और स्वीकार कर सकता हूं एक जवाब से, मैं इसे भी स्वीकार करूंगा। मुझे लगता है कि संयोजन के साथ दोनों जवाब इस व्यवहार से बचने के लिए कुछ अच्छे तर्क प्रदान करते हैं। – Biggert

2

यह रणनीति आपके लिए क्या करेगी, इससे पहले कि आप अपनी निजी संपत्ति को प्राप्त करने या सेट करने वाले किसी भी अन्य कोड को प्रभावित किए बिना पूर्व स्वचालित पुन: निजी संपत्ति में भविष्य में बदलाव करने का अवसर प्रदान करें। मैंने व्यक्तिगत रूप से इसका अधिक उपयोग नहीं किया है, लेकिन यह ऐसे मामले में फायदेमंद हो सकता है जहां हैंडलिंग में बदलाव हो सकते हैं। यह कोड को मानकीकृत करता है ताकि फ़ील्ड हमेशा गुणों से पहुंचे। कोई वास्तविक कमी नहीं है लेकिन ज्यादातर स्थितियों में यह वास्तव में बहुत अधिक लाभ नहीं है।मुझे लगता है कि ज्यादातर स्थितियों में शैली वास्तव में सबसे बड़ा ड्राइवर है।

+0

सार्वजनिक संपत्तियों के लिए समझ में आता है लेकिन निजी के लिए नहीं - मेरा उत्तर –

0

एक सहकर्मी के साथ चर्चा में, यह लाया है कि हम सभी वर्ग स्तर चर के लिए स्वत: गुणों का उपयोग करके ... निजी भी शामिल होते हैं पर विचार करना चाहिए था।

  1. यह उपयोगी नहीं होगा मामले में आप किसी भी तर्क पुन: प्राप्त करने और मूल्यों लौटने के लिए अपनी संपत्ति में लिखने के लिए नहीं है।
  2. बिंदु 1 इसके अलावा, आप, केवल संपत्ति पढ़ा है तो आप सीधे के साथ

public int MyProperty1 { get; set; }

इसके अलावा यह देखने के एक डिजाइन बिंदु से कोड और त्वरित कार्यान्वयन

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