नाम के रूप में स्ट्रिंग का उपयोग करके गतिशील रूप से ऑब्जेक्ट बनाएं, क्या वर्ग नाम के रूप में स्ट्रिंग का उपयोग करके गतिशील रूप से ऑब्जेक्ट बनाने का कोई तरीका है?विजुअल बेसिक:
मैं कई वर्षों से वीबी से बाहर रहा हूं, लेकिन दूसरी भाषा में किसी समस्या को हल करने के लिए, मुझे इस में एक रैपर विकसित करने के लिए मजबूर होना पड़ता है। मेरे पास अन्यत्र से इनपुट के आधार पर एक प्रकार की वस्तु को गतिशील रूप से बनाने और वापस करने के लिए एक कारखाना विधि है। प्रदान किया गया इनपुट क्लास नाम होना है जिससे ऑब्जेक्ट बनाना है। सामान्य वाक्यविन्यास का अर्थ है कि पूरी कक्षा को स्पष्ट रूप से लिखा जाना चाहिए।
If c_name = "Button" then obj = new System.Windows.Forms.Button
If c_name = "Form" then obj = new System.Windows.Forms.Form
....
मैं बजाय आशा करती हूं कि यह सब मामले से निपटने को कम करने: यह इस तरह से करने के लिए, वहाँ सचमुच/तो है या मामलों अगर के सैकड़ों संदर्भित libs के भीतर सभी उपलब्ध वर्ग/वस्तु विकल्पों को संभालने के लिए हो सकता है एक पंक्ति: आईई ...
my_class_name = "whateverclass"
obj = new System.Windows.Forms.my_class_name()
पीएचपी में, यह इतना की तरह नियंत्रित किया जाता है ...
$my_class_name = "whateverclass";
$obj = new $my_class_name();
संपादित करें: कुछ उत्तर को देखते हुए , मुझे लगता है कि मैं अपने सिर पर रास्ते में हूं। मेरे द्वारा प्रबंधित था कि यह विधानसभा वर्ग के this CreateInstance विधि परिवर्तन का उपयोग करने के लिए काम कर रहा है, भले ही मैं this variation giving more options में अधिक रुचि हूँ, मानकों का निर्माण की आपूर्ति सहित ...
my_type_name = "System.Windows.Forms.Button"
asmb_name = "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
button1 = Reflection.Assembly.Load(asmb_name).CreateInstance(my_type_name)
दूसरे शब्दों में, यह एक तरीका है करने के लिए ले जाता है यह, और कोई अंतर्निहित भाषा वाक्यविन्यास नहीं है? This Activator variation भी काम करता है जब पूर्ण असेंबली स्ट्रिंग और क्लास पथ का उपयोग किया जाता है। मुझे संदेह है कि CreateInstance में ऑब्जेक्ट्स का इलाज करने की पूर्ण क्षमता नहीं हो सकती है जैसे कि उन्हें सामान्य रूप से कहा जाता है, यानी obj = new System.Windows.Forms.Button
। यही कारण है कि मैं बस CreateObject
का उपयोग नहीं कर सकता। यदि कोई प्राकृतिक भाषा सुविधा नहीं है जो आपको स्ट्रिंग के लिए क्लास नाम को प्रतिस्थापित करने की इजाजत देती है, तो क्या किसी के पास CreateInstance
का उपयोग करने से मुझे किस प्रकार की सीमाएं मिल सकती हैं?
इसके अलावा, बुनियादी सक्रियकर्ता के बीच भी अंतर है। क्रिएट इंस्टेंस (अनवर्रप के बाद) और असेंबली। क्रिएट इंस्टेंस तरीकों?
अच्छा। 'फॉर्म 1_लोड()' वास्तव में COM के माध्यम से मेरे लिए एक और भाषा के माध्यम से संभाला जाएगा। रेखा 'ओ = असेंबली.लोड (एई)। क्रेते इंस्टेंस (पूरी तरह से क्वालिफाइड क्लासनाम)' इसे करना चाहिए। –