2011-11-18 14 views

Respuesta

12

this.GetType() obtiene el tipo polimórfico de la instancia actual, que en realidad puede ser una subclase de la clase a la que llama this.GetType(), y esa subclase puede estar ubicada en un ensamblaje diferente.

Considere lo siguiente:

AssemblyA.dll:

public class Foo 
{ 
    public void PrintAssembly() 
    { 
     Console.WriteLine(this.GetType().Assembly.GetName()); 
     Console.WriteLine(Assembly.GetExecutingAssembly().GetName()); 
    } 
} 

AssemblyB.dll:

public class Bar : Foo 
{ 
} 

Ahora bien, si se ejecuta el siguiente código:

Bar b = new Bar(); 
b.PrintAssembly(); 

El resultado de la dos formas de determinar el ensamblaje serán no ser lo mismo; this.GetType().Assembly devolverá AssemblyB (porque el tipo real de this es Bar), mientras que Assembly.GetExecutingAssembly() devuelve AssemblyA, porque ese es el ensamblaje que contiene el método Foo.PrintAssembly().

La única vez que puede estar seguro de que se refieren al mismo conjunto es si el tipo que contiene la llamada a this.GetType() está sellado.

+0

¿Estás seguro de esa lógica? –

+0

@Brandon: Sí, lo soy. :) – Sven

+1

¡Bien +1 en ese caso! –

3

Uno le dice la versión del ensamblaje al que pertenece el tipo. El otro le dice la versión del ensamblado que se está ejecutando actualmente. Pero tu ya lo sabias.

Creo que puede suponer con seguridad que el conjunto de ejecución siempre será el mismo que el ensamblado del que 'esto' es parte. Al menos no puedo pensar por qué no sería así.

Si elige uno u otro, para mayor claridad, dependerá de si está buscando el ensamblaje del tipo o el ensamblaje que se está ejecutando. Digamos que tu padre y tu jefe son la misma persona ... ¿te refieres a él como tu jefe en la mesa? ¿O le presentas a tu novia como tu jefe? Usa el que va a tener sentido para la siguiente persona que lea tu código.

+0

Explicaciones increíbles, Brandon. Muchas gracias. – woodykiddy

+0

@woodykiddy Su bienvenida, pero resulta que solo debe prestar atención a los párrafos primero y tercero :) –

+0

No se preocupe. Todos hemos aprendido. :) – woodykiddy