2010-03-16 7 views
161

मैं एक प्रकार है कि मैं एक सामान्य विधि मेरे पास है में निर्दिष्ट का एक उदाहरण बनाना चाहते हैं। इस प्रकार के कई अधिभारित कन्स्ट्रक्टर हैं। मैं कंस्ट्रक्टर्स तर्क पारित करने में सक्षम होना चाहते हैं, लेकिनपैरामीटर पास कैसे Activator.CreateInstance को <T>()

Activator.CreateInstance<T>() 

एक विकल्प के रूप में इस के लिए नहीं देखा है।

वहाँ एक और तरीका यह करने के लिए है?

+3

के संभावित डुप्लिकेट [Activator.CreateInstance - वर्गों पैरामिट्रीकृत कंस्ट्रक्टर्स है कि उदाहरण बना कैसे] (http://stackoverflow.com/questions/1288310/activator-createinstance-how-to-create-instances- की-वर्गों-कि-है-paramete) – nawfal

उत्तर

6

जुड़ा हुआ यूआरएल preforms में Activator.CreateInstance, FastObjectFactory के लिए एक विकल्प (उत्प्रेरक की तुलना में बेहतर .NET 4.0 के रूप में और काफी .NET 3.5। कोई परीक्षण/आँकड़े के साथ किया की तुलना में बेहतर है। नेट 4.5)। आँकड़े, जानकारी और कोड के लिए StackOverflow पोस्ट देखें:

How to pass ctor args in Activator.CreateInstance or use IL?

+0

तुम्हारा मतलब कोई वैकल्पिक समाधान (लिंक किए गए), जो जब आप मानकों से गुजर रहे हैं Activator.CreateInstance तुलना में बेहतर प्रदर्शन करने की संभावना है है कि वहाँ है? या यह सभी मामलों में बेहतर प्रदर्शन करने की संभावना है? –

+1

मैं एक समय में प्रदर्शन परीक्षणों नहीं किया है और जैसे किसी .NET 4.0 आँकड़े तैनात है, लेकिन हाँ .NET 4.0 के साथ यह लग रहा है FastObjectFactory की तरह बेहतर प्रदर्शन किया है यह लग रहा है। एक्टिवेटर। क्रिएट इंस्टेंस .NET 3.5 में भयानक था और .NET 4.0 में काफी तेज़ था हालांकि अभी भी उस यूआरएल में फास्टऑब्जेक्ट फैक्ट्री से धीमा है। – thames

8

वहाँ एक और तरीका नाम वाले पैरामीटर के माध्यम से CreateInstance तर्क पारित करने के लिए है।

उस आधार पर, आप CreateInstance की दिशा में एक सरणी पारित कर सकते हैं। इससे आपको 0 या एकाधिक तर्क मिलेंगे।

public void CreateInstance<T>(params object[] paramArray) 
{ 
    (T)Activator.CreateInstance(typeof(T), args:paramArray); 
} 
+2

यह अपूर्ण लगता है, निश्चित रूप से आपको शून्य के बजाय टाइप टी की ऑब्जेक्ट वापस करने की आवश्यकता है? सार्वजनिक टी CreateInstance (पैराम्स ऑब्जेक्ट [] paramArray) { रिटर्न (टी) एक्टिवेटर। क्रिएट इंस्टेंस (टाइपोफ (टी), तर्क: paramArray); } – wlf