2012-11-06 28 views
5

पर विचार करें निम्नलिखित कोड नमूना है, जहां ConcreteBase से निकला में प्रकार पैरामीटर के रूप में इस्तेमाल नहीं किया जा सकता संकलन त्रुटि होने के बाद, मैंने पहले से ही जांच की है कि सामान्य तर्क Concrete प्रकार के लिए असाइन किया जा सकता है। तो सिद्धांत में मेरा मानना ​​है कि बार वर्ग का उदाहरण बनाने का एक तरीका होना चाहिए।प्रकार 'टी' सामान्य प्रकार या विधि त्रुटि प्रकार में जाना जाता है

वहाँ किसी भी तरह से मैं संकलन त्रुटि को दूर कर सकता है? मैं तर्क डालने का एक तरीका नहीं सोच सकता।


संकलन त्रुटि के पूर्ण पाठ:

Error 14 The type 'T' cannot be used as type parameter 'T' in the generic type or method 'Bar'. There is no implicit reference conversion from 'T' to 'Concrete'.

+1

यह मेरे लिए संकलित करता है ... क्या यह * वास्तविक * उदाहरण है? क्या आपके असली कोड में शायद पैरामीटर हैं? –

+1

आपका कोड त्रुटि संदेश से मेल नहीं खाता है। निश्चित रूप से आपने 'बार (); ' –

+0

लिखा है क्या कोई कारण है कि Foo में' टी: कंक्रीट' नहीं है? संपादन के दौरान – Servy

उत्तर

4

संकलक कोई रास्ता नहीं पता है कि टी, जो वर्तमान में है बेस में रोके वास्तव में कंक्रीट है है, और है कि आप इसे से पहले का परीक्षण भले ही।

तो:

Type type = typeof(Bar<>); 
Type generic = type.MakeGenericType(typeof(T)); 
var x = Activator.CreateInstance(generic); 

यह यह करने के लिए मौका मत।