2009-12-02 3 views

Trả lời

18

Không có. Assembly.CreateInstance thực sự gọi Activator.CreateInstance dưới mui xe.

Sử dụng Reflector trên 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 tìm kiếm một loại trong một hội đồng đặc biệt, trong khi Activator.CreateInstance có thể tạo một đối tượng của bất kỳ loại.

Activator.CreateInstance có quá tải Assembly không; ví dụ, nó có thể tạo các đối tượng trong các miền ứng dụng khác hoặc trên một máy chủ khác sử dụng Remoting.

+0

đó là những điểm tốt – scottm

+0

Tốt. Cảm ơn các bạn. –

2

Bạn có thể cung cấp Activator.CreateInstance với tên loại và tên của hội đồng thay vì đối tượng Loại. Điều này có nghĩa là nó sẽ cố gắng tải assembly vào AppDomain hiện tại (nếu hiện tại không được nạp) và sau đó thử tải loại. Tôi tin rằng Assembly.CreateInstance (mà không gọi Activator) không cố gắng để tải lắp ráp nếu nó không được nạp. Nó chỉ đơn giản là cố gắng để có được đối tượng Type cho kiểu được chỉ định và trả về null nếu nó không được tìm thấy (tôi nói điều này bằng cách đọc mã và không phải sau khi thử nghiệm).