आपको यह ध्यान रखना होगा कि यदि आप ओवरलोडेड कन्स्ट्रक्टर प्रदान नहीं करते हैं, तो संकलक आपके लिए एक डिफ़ॉल्ट कन्स्ट्रक्टर उत्पन्न करेगा। इसका मतलब है, यही कारण है कि अगर आप सिर्फ
public class Foo
{
}
है संकलक इस रूप में उत्पन्न होगा: जैसे ही
public class Foo
{
public Foo() { }
}
हालांकि, अगर आप अन्य निर्माता
public class Foo
{
public Foo(int x, int y)
{
// ...
}
}
संकलक नहीं रह जाएगा जोड़ने के रूप में स्वचालित रूप से आपके लिए डिफ़ॉल्ट कन्स्ट्रक्टर जेनरेट करें। यदि वर्ग पहले से ही दूसरे कोड में उपयोग किया जा रहा था जो डिफ़ॉल्ट कन्स्ट्रक्टर, Foo f = new Foo();
की उपस्थिति पर निर्भर था, तो वह कोड अब टूट जाएगा।
यदि आप नहीं चाहते हैं कि कोई डेटा प्रदान किए बिना कक्षा को प्रारंभ करने में सक्षम हो, तो आपको एक डिफ़ॉल्ट कन्स्ट्रक्टर बनाना चाहिए जो कि private
है, इस तथ्य के बारे में स्पष्ट होना चाहिए कि आप कोई इनपुट डेटा के साथ निर्माण होने से रोक रहे हैं।
हालांकि, कई बार, जब यह एक डिफ़ॉल्ट कन्स्ट्रक्टर (चाहे सार्वजनिक या निजी) प्रदान करना आवश्यक हो। जैसा कि पहले उल्लेख किया गया था, कुछ प्रकार के क्रमिकरण के लिए एक डिफ़ॉल्ट कन्स्ट्रक्टर की आवश्यकता होती है। ऐसे समय भी होते हैं जब एक वर्ग में कई पैरामीटरयुक्त कन्स्ट्रक्टर होते हैं लेकिन उन्हें "निचले स्तर" प्रारंभिकरण की भी आवश्यकता होती है, इस मामले में एक निजी डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग किया जा सकता है जो पैरामीटरयुक्त कन्स्ट्रक्टर से बंधे होते हैं।
public class Foo
{
private Foo()
{
// do some low level initialization here
}
public Foo(int x, int y)
: this()
{
// ...
}
public Foo(int x, int y, int z)
: this()
{
// ...
}
}
स्रोत
2010-09-11 18:12:53
सामान्य रूप से - केवल जब आवश्यक हो। –
हाँ, मैं भी उत्सुक हूँ। मेरा प्रबंधक हमेशा मुझसे कहता है कि प्रतिबिंब के लिए इसकी आवश्यकता है, लेकिन मैं इसके बारे में कुछ भी नहीं कर सका, इसलिए मैं थोड़ा उलझन में हूं। –