मुझे एक अजीब आदत है ऐसा लगता है ... मेरे सहकर्मी के अनुसार कम से कम। हम एक साथ एक छोटे से प्रोजेक्ट पर काम कर रहे हैं। जिस तरह से मैंने कक्षाएँ लिखी हैं (सरलीकृत उदाहरण):
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
इसलिए, मूल रूप से, मैं केवल किसी भी फ़ील्ड को इनिशियलाइज़ करता हूं जब एक गेटर कहा जाता है और फ़ील्ड अभी भी शून्य है। मुझे लगा कि यह किसी भी गुण है कि कहीं भी इस्तेमाल नहीं कर रहे हैं नहीं शुरू करने से अधिभार कम होगा।
ईटीए: इसका कारण यह है कि मेरी कक्षा में कई गुण हैं जो एक अन्य वर्ग के उदाहरण को वापस करते हैं, जिसमें बदले में अभी तक अधिक वर्ग के गुण हैं, और इसी तरह। कंस्ट्रक्टर को शीर्ष वर्ग के लिए कॉल करना बाद में इन सभी वर्गों के लिए सभी कंस्ट्रक्टरों को कॉल करेगा, जब उन्हें हमेशा सभी की आवश्यकता नहीं होती है।
क्या व्यक्तिगत प्राथमिकता के अलावा इस प्रथा के खिलाफ कोई आपत्ति है?
अद्यतन: मैंने इस प्रश्न के संबंध में कई अलग-अलग राय पर विचार किया है और मैं अपने स्वीकृत उत्तर के साथ खड़ा रहूंगा। हालांकि, मैं अब अवधारणा की बहुत बेहतर समझ में आ गया हूं और यह तय करने में सक्षम हूं कि इसका उपयोग कब करना है और कब नहीं।
विपक्ष:
- थ्रेड सुरक्षा मुद्दों
- जब मान पास हो तो "सेटर" अनुरोध न मानना
- माइक्रो अनुकूलन
- एक निर्माणकर्ता में अपवाद हैंडलिंग होनी चाहिए
- कक्षा 'कोड में अशक्त के लिए जाँच करने की आवश्यकता है
पेशेवरों:
- माइक्रो अनुकूलन
- गुण कभी अशक्त नहीं लौटते
- देरी या "भारी" वस्तुओं को लोड करने से बचें
अधिकांश विपक्ष मेरे वर्तमान पुस्तकालय पर लागू नहीं होते हैं, हालांकि मुझे यह देखने के लिए परीक्षण करना होगा कि क्या "सूक्ष्म-अनुकूलन" वास्तव में कुछ भी अनुकूलन कर रहे हैं।
आखिरी अपडेट:
ठीक है, मैंने अपना उत्तर बदल दिया। मेरा मूल प्रश्न यह था कि यह एक अच्छी आदत है या नहीं। और मैं अब आश्वस्त हूं कि यह नहीं है। शायद मैं अभी भी अपने वर्तमान कोड के कुछ हिस्सों में इसका उपयोग करूंगा, लेकिन बिना शर्त और निश्चित रूप से हर समय नहीं। इसलिए मैं अपनी आदत खोने जा रहा हूं और इसे इस्तेमाल करने से पहले सोचता हूं। सबको धन्यवाद!