2009-07-31 9 views
5

मेरे पास कक्षा है, यह कक्षा खाली हो सकती है। इस वर्ग में स्ट्रिंग के प्रकार के केवल सार्वजनिक गुण हैं। जब यह कक्षा खाली स्थिति में होती है, तो इसका मतलब है कि सभी गुणों में स्ट्रिंग का मूल्य होता है। लक्षण।मैं अपने स्वयं के स्थैतिक खाली या शून्य क्षेत्र को ठीक से कैसे कार्यान्वित कर सकता हूं

1) सार्वजनिक स्थिर फ़ील्ड के साथ, कक्षा। गुणों के गुणों को संशोधित किया जा सकता है।

2) मैं नहीं दिख रहा है कि एक सार्वजनिक स्थैतिक संपत्ति गेटर एक नया खाली ऑब्जेक्ट प्रदान (मैन्युअल) हर बार खाली करने के लिए सभी क्षेत्रों की स्थापना की। मैं उस बुरे अभ्यास पर विचार करता हूं।

3) एक वैकल्पिक समाधान अपने कक्षा को लागू करना है। IsNullOrEmpty (कक्षा obj)

4) ए गैर-स्थिर सार्वजनिक बूलियन संपत्ति obj। IsEmpty

अन्य वर्ग जहां इस वर्ग किया जा रहा है, संपत्ति अशक्त कभी नहीं होगा में

अन्य वर्ग किसी विधि (अभी तक एक और कक्षा के) से वापस आ गया है, जो इसे ठीक से प्रारंभ करता है।

एकमात्र मामला संपत्ति शून्य हो सकती है, अगर यह उस विधि के बाहर नया है, तो यह किसी भी तरह से अमान्य स्थिति में होने का कारण बनता है।

उत्तर

9

1 और 2 संघर्ष, मूल रूप से।

या तो अपने प्रकार, अपरिवर्तनीय है जिस स्थिति में आप हर बार एक ही उदाहरण के लिए एक संदर्भ लौट सकते हैं ... या यह परिवर्तनशील है, ऐसी स्थिति में आप एक नई वस्तु को हर बार एक संदर्भ वापस जाने के लिए है।

कारण string.Empty ठीक है क्योंकि string अपरिवर्तनीय है।

क्या आपके प्रकार में उत्परिवर्तनीय होने के लिए है?

संपादित करें: आपकी टिप्पणी के आधार पर, ऐसा लगता है कि गुणों में सेटर्स नहीं होना चाहिए। इसके बजाए, मानकों को कन्स्ट्रक्टर में पास किया जाना चाहिए, और केवल पढ़ने वाले क्षेत्रों में संग्रहीत किया जाना चाहिए।

उस बिंदु अपने प्रकार, अपरिवर्तनीय है तो आप या तो एक सार्वजनिक क्षेत्र या संपत्ति जो हमेशा एक ही मान देता है बेनकाब कर सकते हैं, यानी

private static readonly MyType empty = new MyType("", ""); // Or whatever 
public static MyType Empty { get { return empty; } } 

या

public static readonly MyType Empty = new MyType("", ""); 

आप की जरूरत नहीं है किसी भी संपत्ति को सेट करने के बारे में चिंता करने के लिए, क्योंकि आपके पास कोई सेटर्स नहीं है ...

+0

एक बार गुण सेट होने के बाद, उन्हें कभी नहीं बदला जाना चाहिए। तो जवाब नहीं है, है ना? –

+0

टिप्पणी को प्रतिबिंबित करने के लिए उत्तर संपादन ... –

+0

यह सच है, इस तरह मैंने शुरुआत में प्रॉपर्टी के माध्यम से गुणों को सेट किया है। दुर्भाग्यवश मैं यह उल्लेख करना भूल गया कि प्रकार XmlSerializer के साथ क्रमबद्ध किया जाएगा।मेरे ज्ञान के लिए, सभी सीरियलाइज्ड गुणों के लिए सार्वजनिक प्राप्त/सेटर्स की आवश्यकता होती है। हालांकि, अगर मैं IXmlSerializable को लागू करता हूं (यह एक छोटा वर्ग है जिसे बदलने के लिए नियत नहीं किया गया है), मुझे सार्वजनिक सेटर्स की आवश्यकता नहीं है। सही बात? यदि इस वर्ग को बदलना था, तो मुझे न केवल फ़ील्ड को बदलना/जोड़ना होगा, बल्कि IXmlSerializable कार्यान्वयन में तार भी करना होगा? –

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

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