2012-02-28 7 views
5

मेरे पास कक्षाओं का एक समूह है जहां मेरे बेस में एक कन्स्ट्रक्टर है जो कॉन्फ़िगरेशन ऑब्जेक्ट लेता है और मानों को अपनी गुणों में स्थानांतरित करता है।तत्काल माता-पिता रचनाकारों को कॉल करें

abstract class A { public A(ObjType MyObj){} } 
abstract class B : A {} 
class C : A {} 
class D : B {} 
class E : B {} 

क्या यह संभव है परोक्ष बच्चे कक्षाओं से एक गैर डिफ़ॉल्ट आधार निर्माता कॉल करने के लिए या मैं स्पष्ट रूप से श्रृंखला निर्माताओं के माध्यम से यह करने के लिए ऊपर हस्ताक्षर लागू करने के लिए की आवश्यकता होगी?

abstract class A { public A(ObjType MyObj){} } 
abstract class B : A { public A(ObjType MyObj) : base(MyObj){} } 
class C : A { public A(ObjType MyObj) : base(MyObj){} } 
class D : B { public A(ObjType MyObj) : base(MyObj){} } 
class E : B { public A(ObjType MyObj) : base(MyObj){} } 

अगर ऐसा है, यह बेहतर सिर्फ आधार में एक विधि को लागू करने के फिर मेरे कारखाने तुरंत वस्तु बनाने के बाद विधि कॉल है?

उत्तर

4

लागू? नहीं, रचनाकार विरासत में नहीं हैं। आपकी कक्षा स्पष्ट रूप से अपने माता-पिता के निर्माता को कॉल कर सकती है। लेकिन यदि आप चाहते हैं कि आपकी कक्षा में मूल वर्ग के समान कन्स्ट्रक्टर हस्ताक्षर हों, तो आपको उन्हें लागू करना होगा।

उदाहरण के लिए:

public class A 
{ 
    public A(int someNumber) 
    { 
    } 
} 

// This will not compile becase A doesn't have a default constructor and B 
// doesn't inherit A's constructors. 
public class B : A 
{ 
} 

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

public class B : A 
{ 
    public B(int someNumber) : base(someNumber) 
    { 
    } 
} 
+0

यही वह था जो मैं (विनम्रता से) डरता था। मुझे लगता है कि मैं सहायक-मार्ग मार्ग पर जाऊंगा। धन्यवाद! –

1

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

1

आपको इसे श्रृंखला को स्पष्ट रूप से कार्यान्वित करने की आवश्यकता है। इसके अलावा, महत्वपूर्ण बात यह है कि, आपके मूल कोड में, आप new B() पर कॉल नहीं कर पाएंगे, क्योंकि A में डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है, और BA के निर्माता को तर्क नहीं देता है।

+0

धन्यवाद और खेद है, ब्रेवटी के लिए डिफ़ॉल्ट कन्स्ट्रक्टर छोड़ रहा था। –

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