दिलचस्प पोस्ट
सक्लाइट: में चयन करें? mysql: दो तारीखों के बीच रिकॉर्ड गणना प्राप्त करें pycairo "ImportError: DLL लोड विफल: निर्दिष्ट मॉड्यूल नहीं मिल सका।" यहां तक ​​कि DLL स्थापित होने के बाद भी सी # संपत्ति के लघुकोड के VB.NET बराबर? किसी ऑब्जेक्ट को स्ट्रिंग में सीरियल करें लेआउट में एक दृश्य घूम रहा है कंसोल में ASCII का प्रयोग करके मैं तालिका कैसे बना सकता हूं? एक गिट शाखा की मूल शाखा खोजें समस्या को हाइबरनेट करें – "एक एक-एक या @ कई के लिए एक अनमॅप क्लास को लक्षित करते हुए" डेटाबेस डिजाइन पर कैनोनिकल पाठ? एक बहु-फ़ाइल जाने वाली परियोजना को व्यवस्थित करना कस्टम डिजाइनिंग EditText गैर-शून्य विधि में रिटर्न विवरण गुम है NSData को उद्देश्य सी में NSString में बदलने युगल के बिना एंड्रॉइड में एक लिंक कुंजी निर्दिष्ट करना

स्ट्रिंग से एक क्लास का एक उदाहरण बनाएं

क्या इस तथ्य के आधार पर एक वर्ग का एक उदाहरण बनाने का एक तरीका है कि मैं क्रम के समय कक्षा के नाम को जानता हूं। असल में मुझे एक स्ट्रिंग में क्लास का नाम होगा।

Solutions Collecting From Web of "स्ट्रिंग से एक क्लास का एक उदाहरण बनाएं"

एक्टिवेटर पर एक नज़र डालें। क्रेस्ट इनस्टेंस विधि।

मैंने इस विधि को सफलतापूर्वक उपयोग किया है:

 System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(string className) 

आपको लौटा हुआ ऑब्जेक्ट को अपने वांछित ऑब्जेक्ट प्रकार में डालना होगा।

इसकी बहुत सरल मान लें कि आपका क्लासनाम Car और नाम स्थान Vehicles , फिर पैरामीटर को Vehicles.Car रूप में पास करें। Car जो प्रकार Car का रिटर्न देता है इस तरह आप गतिशील रूप से किसी भी वर्ग के किसी भी उदाहरण बना सकते हैं।

 public object GetInstance(string strFullyQualifiedName) { Type t = Type.GetType(strFullyQualifiedName); return Activator.CreateInstance(t); } 

यदि आपकी पूरी तरह से योग्यता नाम (अर्थात, इस मामले में Vehicles.CarVehicles.Car ) एक अन्य विधानसभा में है, तो Type.GetType निरर्थक होगा। ऐसे मामलों में, आपके पास सभी असेंबलियों के माध्यम से लूप है और Type ढूंढें। इसके लिए आप नीचे कोड का उपयोग कर सकते हैं

 public object GetInstance(string strFullyQualifiedName) { Type type = Type.GetType(strFullyQualifiedName); if (type != null) return Activator.CreateInstance(type); foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) { type = asm.GetType(strFullyQualifiedName); if (type != null) return Activator.CreateInstance(type); } return null; } 

अब अगर आप एक पैरामीट्रैज्ड कन्स्ट्रक्टर को कॉल करना चाहते हैं तो निम्न करें

 Activator.CreateInstance(t,17); // Incase you are calling a constructor of int type 

के बजाय

 Activator.CreateInstance(t); 

शायद मेरा प्रश्न अधिक विशिष्ट होना चाहिए था मुझे वास्तव में स्ट्रिंग के लिए एक बेस क्लास पता है जिससे इसे हल किया जा सकता है:

 ReportClass report = (ReportClass)Activator.CreateInstance(Type.GetType(reportClass)); 

एक्टिवेटर.रेट इंस्टेंस क्लास में विभिन्न तरीकों से एक ही बात हासिल करने के लिए कई तरीके हैं। मैं इसे किसी ऑब्जेक्ट में डाल सकता था लेकिन इसके बाद के संस्करण मेरी स्थिति के लिए सबसे अधिक इस्तेमाल होता है

मुझे पता है कि मैं खेल में देर कर रहा हूं … लेकिन आप जो समाधान ढूंढ रहे हैं वह ऊपर के संयोजन हो सकता है, और एक इंटरफ़ेस का इस्तेमाल करके अपने ऑब्जेक्ट को सार्वजनिक तौर पर सुलभ पहलुओं को परिभाषित कर सकता है

उसके बाद, यदि आपकी सभी कक्षाएं इस इंटरफ़ेस को कार्यान्वित करती हैं, तो आप केवल इंटरफ़ेस प्रकार के रूप में डाल सकते हैं और परिणामस्वरूप वस्तु के साथ काम कर सकते हैं।

आपने उस समाधान का वर्णन किया है जिसे आप लागू करना चाहते हैं, लेकिन समस्या को हल करने की कोशिश नहीं कर रहे हैं

शायद आप एक्सटेन्सिबिलिटी के साथ कुछ करने की कोशिश कर रहे हैं, इस स्थिति में मैं सुझाव देता हूं कि आप प्रबंधित एक्सटेन्सिबिलिटी फ़्रेमवर्क देखें

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

 ReportClass report = (ReportClass)Activator.CreateInstance(Type.GetType(reportClass)); 

आप ऐसा कोड क्यों लिखना चाहते हैं? अगर आपके पास एक क्लास 'रिपोर्ट क्लास' उपलब्ध है, तो आप नीचे दिखाए गए अनुसार सीधे इसे इन्स्तांत कर सकते हैं।

 ReportClass report = new ReportClass(); 

कोड ReportClass report = (ReportClass)Activator.CreateInstance(Type.GetType(reportClass)); इसका उपयोग तब किया जाता है जब आपके पास आवश्यक वर्ग उपलब्ध न हो, लेकिन आप एक विधि को गतिशील रूप से इन्स्तांत करना चाहते हैं या या उसे लागू करना चाहते हैं

मेरा मतलब है यह उपयोगी है जब आप विधानसभा को जानते हैं, लेकिन कोड लिखते समय आपको क्लास ReportClass क्लास उपलब्ध नहीं है।