2009-12-02 8 views

उत्तर

18

कोई नहीं। असेंबली। क्रिएट इंस्टेंस वास्तव में एक्टिवेटर को कॉल करता है। हुड के तहत क्रिएट इंस्टेंस। Assembly.CreateInstance पर

का प्रयोग परावर्तक:

public object CreateInstance(string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes) 
{ 
    Type type = this.GetType(typeName, false, ignoreCase); 
    if (type == null) 
    { 
     return null; 
    } 
    return Activator.CreateInstance(type, bindingAttr, binder, args, culture, activationAttributes); 
} 
16

Assembly.CreateInstance, एक विशेष सभा में एक प्रकार के लिए देखता है, जबकि Activator.CreateInstance किसी भी प्रकार की एक वस्तु बना सकते हैं।

Activator.CreateInstance ओवरलोड करता है कि Assembly नहीं है; उदाहरण के लिए, यह अन्य ऐप डोमेन, या रीमोटिंग का उपयोग कर किसी अन्य सर्वर पर ऑब्जेक्ट्स बना सकता है।

+0

वे अच्छे अंक – scottm

+0

अच्छा हैं। धन्यवाद दोस्तों। –

2

आप प्रकार के नाम और टाइप ऑब्जेक्ट के बजाय असेंबली का नाम Activator.CreateInstance प्रदान कर सकते हैं। इसका अर्थ है कि यह असेंबली को वर्तमान ऐपडोमेन (यदि वर्तमान में लोड नहीं किया गया है) में लोड करने का प्रयास करेगा और फिर प्रकार को लोड करने का प्रयास करेगा। मैं असेंबली पर विश्वास करता हूं। क्रिएट इंस्टेंस (जो कॉल एक्टिवेटर करता है) असेंबली लोड करने का प्रयास नहीं करता है अगर यह लोड नहीं होता है। यह केवल निर्दिष्ट प्रकार के लिए टाइप ऑब्जेक्ट प्राप्त करने का प्रयास करता है और यदि यह नहीं मिलता है तो शून्य वापस आता है (मैं इसे कोड पढ़कर और परीक्षण के बाद नहीं कहता)।