2011-12-29 8 views
9

मैं एक सी # डेवलपर हूं और वीबी.नेट में अनुभव नहीं लिया है।वीबीएनईटी - एकाधिक कन्स्ट्रक्टरों को कॉल करें

परिदृश्य: "। कंस्ट्रक्टर कॉल केवल एक उदाहरण निर्माता में पहले बयान पर मान्य है"

Namespace Presenters 
    Public Class BaseFooPresenter 

     ' assuming the public default parameterless constructor 

     Public Sub New(ByVal strvar As String) 
      ' TODO with strvar variabile 
     End Sub 

    End Class 

    Public Class FooPresenter 
      Inherits BaseFooPresenter 

     Public Sub New(ByVal boolvar As Boolean) 
      ' TODO with boolvar variabile 
     End Sub 

     Public Sub New(ByVal boolvar As Boolean, _ 
         ByVal objvar As Object) 
      MyBase.New(String.Empty) 
      Me.New(true) 
      ' TODO with objvar variabile 
     End Sub 

    End Class 
End Namespace 

इस कोड के साथ दूसरे FooPresenter निर्माता मैं एक त्रुटि

पाने पर

पर:

  Me.New(true) 

अगर मैं मैं पर त्रुटि मिलती आदेश को पलट:

  MyBase.New(String.Empty) 

मैं एक विधि SetValues ​​बना सकते हैं (... मापदंडों ...) और इसे से फोन दो रचनाकारों लेकिन क्या कोई इस त्रुटि से बचने के लिए एक कामकाज करता है ?, क्यों संकलक ओवरलोडेड कन्स्ट्रक्टर से पहले बेस कन्स्ट्रक्टर को कॉल करने की संभावना को मान्य नहीं करता है?

क्या कोई जानता है कि तर्कसंगत रूप से तर्कसंगत कैसे साबित करना है कि एक ही समय में एक वर्ग स्तर के कन्स्ट्रक्टर से बेस क्लास कन्स्ट्रक्टर और अन्य क्लास स्तरीय कन्स्ट्रक्टर को कॉल करना संभव नहीं है?

+0

खेद @Moonlight क्योंकि मैं stackoverflow में बहुत नया हूँ और मैं पर्याप्त प्रतिष्ठा स्कोर (अब 14) की जरूरत नहीं है जवाब :( – manuellt

+3

आप कर सकते हैं वोट करने के लिए अपने रचनात्मक अपरिवर्तनीय के लिए – Moonlight

+2

thanx @Moonlight के जवाब पर अपने अंक (उत्तर के रूप में पतली वोटिंग, जवाब के रूप में चिह्नित करें), मैं अब जवाबों को चिह्नित कर रहा हूं;) – manuellt

उत्तर

16

मुद्दा यह है कि एक बार आप एक पैरामीट्रिक निर्माता निर्दिष्ट करते हैं, parameterless निर्माता बन जाता है निजी जब तक स्पष्ट रूप से आपके अन्यथा निर्दिष्ट।

तो, ken2K के कोड को संशोधित:

Namespace Presenters 
    Public Class BaseFooPresenter 

     ' SPECIFYING the protected default parameterless constructor 
     ' can also be public 
     Protected Sub New() 

     End Sub 

     Public Sub New(ByVal strvar As String) 
      ' TODO with strvar variabile 
     End Sub 

    End Class 

    Public Class FooPresenter 
     Inherits BaseFooPresenter 

     Public Sub New(ByVal boolvar As Boolean) 
      MyBase.New() 
      ' TODO with boolvar variabile 
     End Sub 

     Public Sub New(ByVal boolvar As Boolean, _ 
         ByVal objvar As Object) 
      Me.New(boolvar) 
      ' TODO with objvar variabile 
     End Sub 

    End Class 
End Namespace 
+0

हैलो @MA हनिन, मुझे पैरामीटर रहित बेस कन्स्ट्रक्टर और दूसरे फू प्रेजेंटर कन्स्ट्रक्टर को कॉल करने के लिए पहले फू प्रेजेंटर कन्स्ट्रक्टर की आवश्यकता है, जो बेस ओवरलोडेड बेस कन्स्ट्रक्टर को कॉल करने से पहले/बाद में पहले फूपेंटर कन्स्ट्रक्टर को कॉल करने के लिए कॉल करें, मुझे लगता है कि यह संभव नहीं है। – manuellt

2

आप इस तरह के कई रचनाकारों को कॉल नहीं कर सकते हैं। सी # की तरह ही आप केवल एक प्रारंभकर्ता को कॉल कर सकते हैं।

4

बस C# के साथ, आप this() और base() पर एक ही समय पर कॉल नहीं कर सकते हैं। यहाँ आप क्या करना चाहिए:

Namespace Presenters 
    Public Class BaseFooPresenter 

     ' assuming the public default parameterless constructor 

     Public Sub New(ByVal strvar As String) 
      ' TODO with strvar variabile 
     End Sub 

    End Class 

    Public Class FooPresenter 
      Inherits BaseFooPresenter 

     Public Sub New(ByVal boolvar As Boolean) 
      MyBase.New(String.Empty) 
      ' TODO with boolvar variabile 
     End Sub 

     Public Sub New(ByVal boolvar As Boolean, _ 
         ByVal objvar As Object) 
      Me.New(boolvar) 
      ' TODO with objvar variabile 
     End Sub 

    End Class 
End Namespace 
+0

हाय @ केएन 2 के, यह महत्वपूर्ण है कि पहले कन्स्ट्रक्टर को कॉल न करें ओवरलोडेड बेस क्लास कन्स्ट्रक्टर, यह जरूरी है कि पहले कन्स्ट्रक्टर पहले से ही अंतर्निहित पैरामीटर रहित बेस क्लास कन्स्ट्रक्टर, थेंक्स को कॉल करता है। – manuellt

+1

@manuellt: 'यह जरूरी है कि पहला कन्स्ट्रक्टर अंतर्निहित पैरामीटर रहित बेस क्लास कन्स्ट्रक्टर' क्यों कहता है? ऐसा लगता है कि आप इस आवश्यकता के साथ अपनी पीठ के लिए सिर्फ रॉड बना रहे हैं। आपके पर्यवेक्षण के लिए –

+0

@ रोबिन ब्राउन, थैक्स, फूपेंटरर बेस क्लास में बनाए गए ऑब्जेक्ट का उपभोग करता है यदि पैरामीटर रहित या स्टैक्ड ऑब्जेक्ट के साथ बनाया गया हो, तो अधिभारित कन्स्ट्रक्टर के साथ इसे बेस क्लास की कुंजी पास करने के लिए कहा जाता है, कई मौजूदा कक्षाएं इस आधार वर्ग से मान्यता प्राप्त है और मैं केवल कुछ मौजूदा वर्गों और नए लोगों पर नए व्यवहार को लागू करने के लिए कम प्रभावशाली तरीका खोजना चाहता हूं। – manuellt