Sự khác biệt giữa các cuộc gọi này là gì?Sự khác biệt giữa Assembly.CreateInstance và Activator.CreateInstance?
Trả lời
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);
}
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.
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).
đó là những điểm tốt – scottm
Tốt. Cảm ơn các bạn. –