एक बड़ा अंतर ये है कि
Student s1 = new Student();
अगर वहाँ Student
पर कोई डिफ़ॉल्ट निर्माता है संकलन नहीं होगा, जबकि
Student s1 = Activator.CreateInstance<Student>();
संकलन जाएगा, भले ही Student
करता है एक डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है। (यह संकलित होगा, और आपको प्रोग्राम चलाने देगा, लेकिन यदि कोई मिलान करने वाला कन्स्ट्रक्टर नहीं है तो आपको अपवाद मिलेगा, जबकि कन्स्ट्रक्टर कॉल भी संकलित नहीं होगा अगर कन्स्ट्रक्टर मौजूद नहीं है।)
इसी प्रकार, CreateInstance
कॉल कक्षा का एक निहित उपयोग है, इसलिए, उदाहरण के लिए, रिशेर्पर को यह नहीं पता होगा कि आप इसे तुरंत चालू कर रहे हैं, और आपको बता सकते हैं कि कक्षा कभी भी तत्काल नहीं है।
अन्य उत्तर में उल्लेख किया है, CreateInstance
कॉल भी एक सामान्य प्रकार पैरामीटर के उपयोग के लिए अनुमति देता है:
T s1 = Activator.CreateInstance<T>();
हालांकि आप शायद बेहतर होगा एक new
प्रकार बाधा का उपयोग कर, क्योंकि यह आप संकलन देना होगा होगा समय पर आश्वासन है कि वास्तव में एक कन्स्ट्रक्टर कहा जाता है।
Activator.CreateInstance(Type, ...)
अधिभार अधिक उपयोगी हैं, हालांकि।
स्रोत
2014-03-31 23:24:45
संबंधित: http://stackoverflow.com/questions/6582259/fast-creation-of-objects-instead-of-activator-createinstancetype, http://stackoverflow.com/questions/6069661/does-system-activator -createinstancet-have-performance-issues-big-enough-to-di – nawfal