मेरे पास एक सामान्य प्रकार Store<T>
है और इस प्रकार का उदाहरण बनाने के लिए Activator
का उपयोग करें। अब, एक्टिवेटर का उपयोग करने के बाद, क्या मैं परिणाम object
के परिणामस्वरूप ऑब्जेक्ट को तुरंत चालू कर सकता हूं? मैं उस प्रकार को जानता हूं जिसे मैंने जेनेरिक को तुरंत चालू करने के लिए उपयोग किया था। कृपया निम्नलिखित कोड देखें:सामान्य प्रकार का उदाहरण बनाने और इसे उस प्रकार वापस करने के लिए एक्टिवेटर का उपयोग कैसे करें?
class Store<T> where T : IStorable
{}
class Beer : IStorable
{}
class BeerStore : Store<Beer>
{}
Type storeType = someObjectThatImplementsIStorable.GetType();
Type classType = typeof(Store<>);
Type[] typeParams = new Type[] { storeType };
Type constructedType = classType.MakeGenericType(typeParams);
object x = Activator.CreateInstance(constructedType, new object[] { someParameter });
मुझे क्या करना चाहते हैं कुछ इस तरह है:
var store = (Store<typeof(objectThatImplementsIStorable)>)x;
लेकिन यह स्पष्ट कारणों के लिए काम नहीं करता। एक विकल्प के रूप मैंने कोशिश की:
var store = (Store<IStorable>)x;
जो संभवतः मेरी राय में काम कर सकता है, लेकिन एक InvalidCastException
देता है।
मैं Store<T>
विधियों को फिर से कैसे प्राप्त करूं जो मुझे पता है कि x
ऑब्जेक्ट में हैं?
आप कर सकते हैं 'obvious' कारण और अधिक स्पष्ट? या सिर्फ हमें बताओ कारण क्या है। या आप वास्तव में क्या मतलब है' typeof होना चाहिए ... ' , इसे अपने प्रकार से प्रतिस्थापित नहीं कर रहे हैं? – Snowbear
@nownowear कि कोड का टुकड़ा संकलित नहीं करता है क्योंकि जेनेरिक टी के रूप में उपयोग किए जाने वाले प्रकारों के उदाहरणों की अनुमति नहीं देते हैं। मुझे यह प्रकार पता नहीं है, यह कोई भी वस्तु हो सकती है जो लागू करती है इष्टतम इंटरफ़ेस। – Bazzz
डीबगर सोचने वाला एक्स किस प्रकार का है? क्या यह सही प्रकार है? – CarneyCode