मुझे लगता है कि में Wyatt Barnett's answer से सहमत करने के लिए जब "अशक्त" वस्तुओं के इन प्रकार बनाने आप संयम दिखाना चाहिए होते हैं। उस ने कहा, ऐसा करने के कुछ अच्छे कारण हैं। अवसर पर।
मैं Supertux's answer से भी सहमत हूं कि एक शून्य वस्तु के पूरे बिंदु को यह जांचने की आवश्यकता नहीं है कि यह शून्य है या नहीं, तो आपको IsNull संपत्ति खोनी चाहिए। यदि आपको वास्तव में लगता है कि आपको IsNull संपत्ति की आवश्यकता है, तो फिर वैट की प्रतिक्रिया को फिर से पढ़ें और पुनर्विचार करें।
और अधिक जानकारी के लिए CraigTP for the nice links धन्यवाद। अच्छी चीज़।
अब मैं मानता हूं कि आपके वास्तविक कोड में आपके पास वास्तव में एक निर्माता है जो नाम या प्रजातियों के मूल्य निर्धारित करने का प्रयास कर रहा है (जो भी आपका वास्तविक कोड समकक्ष कहा जा सकता है)। अन्यथा, आपको "कन्स्ट्रक्टर में आभासी सदस्य कॉल" चेतावनी/त्रुटि क्यों मिलेगी? न्यूफैंगल्ड माईप्रोपर्टी का उपयोग करते समय मैंने कुछ समान समस्याओं में भाग लिया है {प्राप्त करें; सेट; } खुद को शॉर्टकट (विशेष रूप से जब structs में उपयोग किया जाता है, और मुझे serialization संस्करण के बारे में शुरू नहीं करते हैं)। आपका समाधान शॉर्टकट का उपयोग नहीं करना है, बल्कि इसके बजाय पुराने तरीके से करें।
public class Animal {
protected Animal() { }
public Animal(string name, string species) {
_Name = name;
_Species = species;
}
public virtual string Name {
get { return _Name; }
set { _Name = value; }
}
private string _Name;
public virtual string Species {
get { return _Species; }
set { _Species = value; }
}
private string _Species;
}
public sealed class NullAnimal : Animal {
public override string Name {
get { return String.Empty; }
set { }
}
public override string Species {
get { return String.Empty; }
set { }
}
}
यह आपके वर्चुअल गुणों को कन्स्ट्रक्टर में सेट करने की समस्या को हल करता है। इसके बजाय, आप अपने निजी फ़ील्ड मान सेट कर रहे हैं (यदि आपके पास शॉर्टकट का उपयोग करने पर संदर्भ करने की क्षमता नहीं है)। अतिरिक्त क्रेडिट के लिए, दोनों विधियों को संकलित करें, और परिणामी असेंबली को देखने के लिए परावर्तक का उपयोग करें।
जितना अधिक मैं {get; सेट; } शॉर्टकट, जितना अधिक मैं इसे नापसंद करता हूं।
स्रोत
2009-07-24 21:53:41
आप जिस समस्या को हल करने की कोशिश कर रहे हैं? शून्य संदर्भों के साथ क्या गलत है, बिल्कुल? – spoulson
http://www.refactoring.com/catalog/introduceNullObject.html – Sisiutl
नलएनिमल कक्षा में आपकी IsNull संपत्ति एक ओवरराइड होना चाहिए, वर्चुअल नहीं। – TGnat