2009-12-02 11 views

Respuesta

18

Ninguno. Assembly.CreateInstance en realidad llama a Activator.CreateInstance debajo del capó.

Usando Reflector en 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 mira para un tipo en un conjunto particular, mientras que Activator.CreateInstance puede crear un objeto de cualquier tipo.

Activator.CreateInstance tiene sobrecargas que Assembly no; por ejemplo, puede crear objetos en otros dominios de la aplicación o en otro servidor usando Remoting.

+0

esos son buenos puntos – scottm

+0

Nice. Gracias chicos. –

2

Puede suministrar Activator.CreateInstance con el nombre del tipo y el nombre del conjunto en lugar de un objeto Type. Esto significa que intentará cargar el ensamblado en el Dominio de aplicación actual (si no está cargado actualmente) y luego intentará cargar el tipo. Creo que Assembly.CreateInstance (que llama al activador) no intenta cargar el ensamblaje si no está cargado. Simplemente intenta obtener el objeto Type para el tipo especificado y devuelve null si no se encuentra (digo esto leyendo el código y no después de la prueba).

Cuestiones relacionadas