2012-03-26 5 views
5

सभी कोड उदाहरण हमेशा आधार() का उपयोग के रूप मेंस्पष्ट रूप से व्युत्पन्न कन्स्ट्रक्टरों में आधार() को कॉल कर रहा है?

class A 
{ 
    public A() 
    { 
     Console.Writeline("A"); 
    } 
} 

class B : A 
{ 
    public B():base() {} 
} 

जैसे इस प्रकार है http://msdn.microsoft.com/en-us/library/hfw7t1ce%28v=vs.71%29.aspx

के रूप में मैं हाल ही में खोजे

class A 
{ 
    public A() 
    { 
     Console.Writeline("A"); 
    } 
} 

class B : A 
{ 
    public B() {} 
} 

भी प्रिंट जबकि एक

क्यू - यह एक नया "सुविधा" है या यह बुरा रूप व्युत्पन्न वर्ग कंस्ट्रक्टर्स में आधार() कहते हैं और इच्छा के लिए नहीं है मेरे बुरे कर्म में जोड़ें और बाद में समस्याएं पैदा करें?

या

बेस() को सुरक्षित रूप से अनदेखा कर सकते हैं?

+2

प्रदान किया गया लिंक विजुअल स्टूडियो 2003 (इसलिए यह नया नहीं है) के लिए है और इसमें बेस कन्स्ट्रक्टर को कॉल करने के निर्देश शामिल हैं। यहां कोई जवाब सिर्फ एमएसडीएन में दोहराने की जानकारी होगी। – cadrell0

+0

@ cadrell0 लिंक में व्युत्पन्न बेस() से कॉल करने का उदाहरण है। कन्स्ट्रक्टर(), यह AFAIK – Kumar

उत्तर

7

नहीं यह नया नहीं है - यदि आप स्पष्ट रूप से आधार निर्माता को कॉल नहीं करते हैं, तो डिफ़ॉल्ट कन्स्ट्रक्टर डिफ़ॉल्ट रूप से कॉल किया जाएगा।

इसे स्वयं जोड़ना मैं केवल "शोर" पर विचार करता हूं, संकलक आपके लिए पहले से ही ऐसा करेगा, इसलिए आपको यह नहीं करना है। यदि आपको डिफ़ॉल्ट कन्स्ट्रक्टर के अलावा किसी विशिष्ट अधिभार की आवश्यकता है तो आपको केवल बेस कन्स्ट्रक्टर को कॉल करना चाहिए (इसका मतलब है कि बेस बेस कन्स्ट्रक्टर कॉल करने की आवश्यकता है, हालांकि बेस क्लास डिफॉल्ट कन्स्ट्रक्टर प्रदान नहीं करता है)।

+2

के ऊपर क्यू का उत्तर नहीं देता है "डिफ़ॉल्ट कन्स्ट्रक्टर कहलाए जाने वाले" के बारे में विस्तार से विस्तार करने के लिए, कृपया http: // देखें ideone.com/o26u1 (ध्यान दें 'नया बी ("बी 2")' कॉल 'बी :: बी (स्ट्रिंग)' फिर 'ए :: ए()' कन्स्ट्रक्टर।) हालांकि, 'सी :: सी (स्ट्रिंग) ' 'आधार (तर्क) 'संदर्भ के कारण' ए :: ए (स्ट्रिंग) 'कन्स्ट्रक्टर को कॉल करता है। –

6

आप केवल आधार का उपयोग करने के अगर

1) आप आधार निर्माता को चर नीचे उत्तीर्ण करने की आवश्यकता की जरूरत है।

2) आपको निर्दिष्ट करने के लिए किन बेस कन्स्ट्रक्टर निर्दिष्ट करना होगा।

इसके अलावा आप इसे सुरक्षित रूप से छोड़ सकते हैं। डिफ़ॉल्ट आधार कन्स्ट्रक्टर कहा जाएगा।

3

डिफ़ॉल्ट कन्स्ट्रक्टर को यह कॉल किया जाएगा कि आप इसे : base() के साथ स्पष्ट रूप से कॉल करते हैं या नहीं। यह शैली का मामला है, लेकिन प्रचलित सम्मेलन इसे तब तक छोड़ना है जब तक आप एक विशिष्ट, पैरामीटरयुक्त बेस कन्स्ट्रक्टर को कॉल नहीं कर रहे हों।

+0

+1 अच्छी तरह से कहा। (अन्य उत्तरों भी अच्छे हैं) – radbyx

1

कॉलिंग बेस() की आवश्यकता नहीं है। डिफ़ॉल्ट बेस कन्स्ट्रक्टर स्वचालित रूप से तब तक कॉल किए जाते हैं जब तक कि आप स्पष्ट रूप से किसी अन्य को कॉल न करें। यह व्यक्तिगत प्राथमिकता का विषय है, मुझे लगता है कि उदाहरण फ़ील्ड तक पहुंचने से पहले this तैयार करना पसंद है।

0

आपको अपने कन्स्ट्रक्टर से आधार() को कॉल करने की आवश्यकता नहीं है जब माता-पिता और बच्चे दोनों के पास एक निहित या स्पष्ट पैरामीटर रहित कन्स्ट्रक्टर होता है। यह डिफ़ॉल्ट रूप से होगा, और नहीं, यह नया नहीं है। आम तौर पर, आप बेस() विधि का उपयोग यह कहने के लिए करेंगे कि आप कौन से अभिभावक कन्स्ट्रक्टर को बुला रहे हैं और बच्चे के कन्स्ट्रक्टर से माता-पिता के लिए तर्क पारित करने के लिए।

यह देखने के लिए कि यह कैसे काम करता है, अपने कन्स्ट्रक्टर में तर्क के साथ आज़माएं।

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