Como sugiere el título, ¿cómo se diferencian estos dos entre sí? ¿Podemos decir que ambos son lo mismo? ¿Cuándo es el mejor caso donde elegimos uno sobre el otro? Lo encontré y no estaba muy seguro. Espero que alguien pueda aclarar mis dudas. Gracias por adelantado.¿Cuál es la diferencia entre this.GetType(). Assembly.GetName(). Version y Assembly.GetExecutingAssembly(). GetName(). Version?
Respuesta
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.
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.
Explicaciones increíbles, Brandon. Muchas gracias. – woodykiddy
@woodykiddy Su bienvenida, pero resulta que solo debe prestar atención a los párrafos primero y tercero :) –
No se preocupe. Todos hemos aprendido. :) – woodykiddy
- 1. ¿Cuál es la diferencia entre Version y 'Runtime Version' en .Net?
- 2. ¿Cuál es la diferencia entre "Thread.currentThread(). GetName" y "this.getName"?
- 3. Downgrade NodeJs Version y express version
- 4. ¿Cuál es la diferencia real entre Base SDK y Deployment Target o Deployment OS Version?
- 5. JAVA_HOME y java -version
- 6. javadoc: @version y @since
- 7. JDK, JRE, Java: Version Confusion!
- 8. PowerBuilder 11.5 y Version Control
- 9. Eclipse Version
- 10. ASP.Net Version/Build Number
- 11. Comenzar con Version Control
- 12. PLC Version Control
- 13. Hacer que TeamCity Version Match .NET Assembly Version
- 14. MySQL Version Control - Subversion
- 15. SVN mark major version
- 16. JQuery Version Conflict
- 17. Optimistic vs Multi Version Concurrency Control - ¿Diferencias?
- 18. WPF WebBrowser Browser Version
- 19. plist bundle version values
- 20. JPA @Version: cómo usarlo?
- 21. Java - JPA - @Version Anotación
- 22. .NET framework version used
- 23. Greasemonkey Version Script constante
- 24. Apex Code Version Control
- 25. ¿Cuál es la diferencia entre "aspnet_regiis -ir" y "aspnet_regiis -iru"?
- 26. ¿qué implica macosx-version-min?
- 27. Print Rails version in views?
- 28. ¿Cuál es la diferencia entre gmake y make?
- 29. Python windows File Version atributo
- 30. subparser argparse opcional (para --version)
¿Estás seguro de esa lógica? –
@Brandon: Sí, lo soy. :) – Sven
¡Bien +1 en ese caso! –