संशोधन:
मुझे लगता है कि यह बहुत फर्क नहीं पड़ता कि आप एक मात्र स्रोत अनुकूलता में रुचि रखते हैं।
एक संपत्ति का उपयोग बाइनरी संगतता के लिए बेहतर है क्योंकि आप इसे उस संपत्ति द्वारा प्रतिस्थापित कर सकते हैं जिसमें आपकी लाइब्रेरी के आधार पर संकलित कोड को तोड़ने के बिना एक सेटटर है।
कन्वेंशन:
आप सम्मेलन का पालन कर रहे हैं। इस तरह के मामलों में जहां सम्मेलन बेहतर होने के बाद दोनों संभावनाओं के बीच मतभेद अपेक्षाकृत मामूली हैं। एक मामला जहां यह काटने के लिए वापस आ सकता है आप प्रतिबिंब आधारित कोड है।यह केवल गुण स्वीकार कर सकता है न कि फ़ील्ड, उदाहरण के लिए एक संपत्ति संपादक/दर्शक।
क्रमबद्धता
संपत्ति के क्षेत्र से बदल रहा है शायद serializers का एक बहुत टूट जाएगा। और AFAIK XmlSerializer
केवल सार्वजनिक गुणों को क्रमबद्ध करता है, न कि सार्वजनिक फ़ील्ड।
एक Autoproperty
एक अन्य आम परिवर्तन का उपयोग एक निजी सेटर के साथ एक autoproperty उपयोग कर रहा है। हालांकि यह छोटा है और एक संपत्ति यह पठनीयता को लागू नहीं करती है। तो मैं दूसरे को पसंद करता हूं।
केवल पढ़ने के लिए क्षेत्र
selfdocumenting है, हालांकि क्षेत्र में से एक फायदा है:
यह सार्वजनिक इंटरफ़ेस है कि यह वास्तव अपरिवर्तनीय है (छोड़कर प्रतिबिंब) पर एक नज़र में स्पष्ट करता है। जबकि किसी संपत्ति के मामले में आप केवल देख सकते हैं कि आप इसे बदल नहीं सकते हैं, इसलिए आपको दस्तावेज़ या कार्यान्वयन का संदर्भ लेना होगा।
लेकिन ईमानदार होने के लिए मैं आलसी हूं क्योंकि मैं अक्सर आवेदन कोड में पहले व्यक्ति का उपयोग करता हूं। पुस्तकालयों में मैं आम तौर पर अधिक गहन हूं और सम्मेलन का पालन करता हूं।
सी # 6.0 केवल पढ़ने के लिए स्वत: गुण
public object MyProperty { get; }
कहते हैं तो जब आप पुराने compilers आपको लगता है कि बस के रूप में एक केवल पढ़ने के लिए क्षेत्र के रूप में संक्षिप्त है कोड के साथ वास्तव में केवल पढ़ने के लिए संपत्ति हो सकती है समर्थन करने के लिए की जरूरत नहीं है।
मैं कभी-कभी ऑटो-प्रॉपर्टी सिंटैक्स को 'प्राप्त करने की इच्छा करता हूं; केवल पढ़ने के लिए सेट; 'विकल्प। –
[सी #, अपरिवर्तनीयता और सार्वजनिक रीडोनली फ़ील्ड] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2249980/c-immutability-and-public-readonly-fields) – user