.net - VB.Net constructor order matters? -


कन्स्ट्रक्टर ऑर्डर ऑर्डर वीबीनेट में क्यों करता है? मैं एक .NET टाइप लाइब्रेरी का निर्माण कर रहा हूं जो कि एक अंतर्निहित COM पुस्तकालय को पूरी तरह से लपेटने के लिए है ताकि एपीआई के उपभोक्ताओं को एक COM लायब्रेरी के बजाय नेट संग्रह और whatnot के साथ एक अच्छा नेट लाइब्रेरी का उपयोग करने का बहाना कर सके।

वर्तमान में मेरी कक्षाओं में से अधिकांश केवल प्रतिबिंब और कोडडॉम द्वारा बनाए गए 1 से 1 रैपर हैं ये कक्षाएं एक आंतरिक निर्माता हैं जो एक पैरामीटर के रूप में अंतर्निहित COM प्रकार लेती हैं कोडडॉम इसे क्लास के पहले कन्स्ट्रक्टर के रूप में बनाता है। सी # से इन वर्गों का उपयोग करने से कोई समस्या नहीं होती है। मुझे सभी की आवश्यकता नेट लाइब्रेरी का एक संदर्भ है और सभी काम अच्छे हैं।

समस्याएं तब दिखाई देती हैं जब मैं इन कक्षाओं का उपयोग वीबीनेट परियोजना से करता हूं। यदि पहले कन्स्ट्रक्टर के पास तर्कसंगत तर्क के रूप में एक COM प्रकार है, तो VB.Net परियोजना को संदर्भ के रूप में COM इंटरॉप असेंबली की आवश्यकता है। यदि पहले कन्स्ट्रक्टर के पास कोई तर्क नहीं है या केवल प्रबंधित प्रकार सभी काम अच्छे हैं मेरी कक्षा पुस्तकालय सी # में लिखा है।

निम्नलिखित कार्य:

  सार्वजनिक वर्ग ObjectID {सार्वजनिक ObjectID (int प्रकार, int id) {this.Type = type; This.ID = आईडी; } आंतरिक ऑब्जेक्ट (COMLib.ObjectID आईडी): यह (आईडी.Type, id.ID) {} सार्वजनिक Int आईडी {प्राप्त करें; सेट; } पब्लिक इंट प्रकार {get; सेट; } आंतरिक COMLib.ObjectID ToCOM () {COMLib.ObjectID आईडी = नया COMLib.ObjectID (); Id.ID = this.ID; Id.Type = this.Type; वापसी आईडी; }}  

निम्न को COMLib.Interop विधानसभा के संदर्भ की आवश्यकता है:

  सार्वजनिक वर्ग ObjectID {आंतरिक ObjectID (COMLib.ObjectID id): यह ( Id.Type, id.ID) {} सार्वजनिक ऑब्जेक्टआईडी (int प्रकार, int आईडी) {this.Type = type; This.ID = आईडी; } सार्वजनिक int आईडी {प्राप्त करें; सेट; } पब्लिक इंट प्रकार {get; सेट; } आंतरिक COMLib.ObjectID ToCOM () {COMLib.ObjectID आईडी = नया COMLib.ObjectID (); Id.ID = this.ID; Id.Type = this.Type; वापसी आईडी; }}  

अब मैं पहली कन्स्ट्रक्टर के रूप में इन वर्गों के लिए एक डमी निजी निर्माता बना कर इसका समाधान कर सकता हूं, लेकिन मैं इसके बारे में अधिक उत्सुक हूं कि इसके कारण क्या होता है? कंस्ट्रक्टर घोषणाओं का क्रम VB.Net में क्यों होता है?

अपडेट

यह इतना पागल लग रहा था कि मैंने इसे खुद पर शक करना शुरू कर दिया। 3 परियोजनाओं के साथ इसे दोहराने के लिए प्रबंधित।

सी # कक्षा पुस्तकालय: लपेटा

  नाम स्थान लपेटा गया {सार्वजनिक वर्ग} कक्षा 1 {}}  

सी # कक्षा लाइब्रेरी: रैपर

  नाम स्थान आवरण {सार्वजनिक वर्ग कक्षा 1} (आंतरिक कक्षा 1 (लिपटा। क्लास 1 सी) {} सार्वजनिक कक्षा 1 () {}}}  

VB.Net कंसोल ऐप: रेफेरर

  मॉड्यूल मॉड्यूल 1 सब-मेन () नई रैपर के रूप में डम। क्लास 1 एंड सब एंड मॉड्यूल  

रैपर को लिपटे रेफेरर को संदर्भित करता है कि रैपर रेपरेर को लिपटे नहीं है

  मंद रूप में नई रैपर। क्लास 1  

एक त्रुटि उत्पन्न करता है

  विधानसभा के लिए आवश्यक संदर्भ 'लिपटा, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, पब्लिककेतनटोकन = नल' युक्त 'wrapped.Class1' प्रकार। अपने प्रोजेक्ट में एक जोड़ें  

कन्स्ट्रक्टरों के आदेश को स्वैप करने से त्रुटि का ख्याल रखता है।

कुछ और के आसपास खेलने के बाद अद्यतन < / P>

  त्रुटि के कारण: कोई त्रुटि नहीं: Vb-ReferTest Vb-RefererTest | | वीबी-वी वी रीफेरर में सुधार त्रुटि भी सीएस-रैपर सीएस-रैपर Vb-wrapper & lt; - अगर वीबी-रैपर | \ / और RefererTest वीवीवी में कोई प्रत्यक्ष सीएस-रस्सी नहीं दी गई लाइब्रेरी सीएस-रस्पेखित लायब्रेरी संबंध  

यदि सही (मैं आसानी से सत्यापित नहीं कर सकता), जो कि फासीनिंग है आदेश कोई फर्क नहीं होना चाहिए, AFAIK यदि आप इसके बारे में निश्चित हैं, तो शायद (नमूना कोड के साथ)।


Comments

Popular posts from this blog

python - Overriding the save method in Django ModelForm -

html - CSS autoheight, but fit content to height of div -

qt - How to prevent QAudioInput from automatically boosting the master volume to 100%? -