वास्तव में आप अंतिम पंक्ति लिखने में सक्षम नहीं होंगे।
लेकिन शायद आप इस उद्देश्य को बनाने या बनाने के लिए ऑब्जेक्ट बनाना नहीं चाहते हैं। आप शायद अपने नए बनाए गए उदाहरण पर कुछ विधि कॉल करना चाहते हैं।
फिर आप एक इंटरफेस की तरह कुछ की आवश्यकता होगी:
public interface ITask
{
void Process(object o);
}
public class Task<T> : ITask
{
void ITask.Process(object o)
{
if(o is T) // Just to be sure, and maybe throw an exception
Process(o as T);
}
public void Process(T o) { }
}
और से कॉल करने की:
Type d1 = Type.GetType("TaskA"); //or "TaskB"
Type[] typeArgs = { typeof(Item) };
Type makeme = d1.MakeGenericType(typeArgs);
ITask task = Activator.CreateInstance(makeme) as ITask;
// This can be Item, or any type derived from Item
task.Process(new Item());
किसी भी मामले में, आप स्थिर एक प्रकार आप डॉन 'में ढाला नहीं जा जाएगा पहले से पता नहीं (इस मामले में "makeme")। आईटस्क आपको अपने लक्षित प्रकार तक पहुंचने की अनुमति देता है।
यदि यह वही नहीं है जो आप चाहते हैं, तो आपको शायद इसके साथ हासिल करने की कोशिश में कुछ और विशिष्ट होना चाहिए।
स्रोत
2009-07-20 02:49:26
बैकटिक आवश्यक है, यानी अगर यह ओमेटेड है, तो क्या संकलक मानता है कि यह 1 है? – richard
मेरे ब्लॉग आलेख को जोड़ने के लिए धन्यवाद "सी # .Net" (http://omegacoder.com/?p=38) में "सामान्य उदाहरण" के रूप में एक जेनेरिक क्लास को इंस्टेंट्यूट करने के लिए प्रतिबिंब का उपयोग करना। :-) मुझे खुशी है कि लेख नए जीवन को ढूंढ रहा है। – OmegaMan
मैं 'is' कीवर्ड का उपयोग कर जेनेरिक प्रकार की तुलना कैसे करूं? –