Come suggerisce il titolo, in che modo questi due si differenziano tra loro? Siamo sicuri di dire che sono entrambi uguali? Quando è il caso migliore in cui scegliamo l'uno sull'altro? Mi è capitato di incontrarlo e non ne ero sicuro. Spero che qualcuno possa chiarire i miei dubbi. Grazie in anticipo.Qual è la differenza tra this.GetType(). Assembly.GetName(). Versione e Assembly.GetExecutingAssembly(). GetName(). Version?
risposta
this.GetType()
ottiene il tipo polimorfico dell'istanza corrente, che potrebbe effettivamente essere una sottoclasse della classe che si sta chiamando this.GetType()
da e che la sottoclasse potrebbe trovarsi in un diverso assieme.
Si consideri il seguente:
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
{
}
Ora, se si esegue il seguente codice:
Bar b = new Bar();
b.PrintAssembly();
Il risultato del due modi per determinare l'assemblea sarà non essere lo stesso; this.GetType().Assembly
sarà ritorno AssemblyB (perché il tipo effettivo di this
è Bar
), considerando che Assembly.GetExecutingAssembly()
rendimenti AssemblyA, perché questo è il gruppo contenente il metodo Foo.PrintAssembly()
.
L'unica volta che si può essere certi che si riferiscono allo stesso assembly è se il tipo che contiene la chiamata a this.GetType()
è sigillato.
ti dice la versione dell'Assemblea del tipo appartiene. L'altro indica la versione dell'assembly attualmente in esecuzione. Ma tu lo sapevi già.
Credo che si può tranquillamente supporre che il gruppo esegue sta andando sempre essere lo stesso l'assemblea che 'questo' fa parte. Almeno non riesco a pensare al motivo per cui non lo sarebbe.
Se si sceglie uno o l'altro, per l'amor di chiarezza, sarebbe dipende se siete alla ricerca per l'assemblaggio del tipo, o il gruppo che sta eseguendo. Diciamo che tuo padre e il tuo capo sono la stessa persona ... ti riferisci a lui come al tuo capo a tavola? O lo presenti alla tua ragazza come tuo capo? Usa quello che ha senso per la prossima persona che legge il tuo codice.
spiegazioni Impressionante, Brandon. Grazie mille. – woodykiddy
@woodykiddy Benvenuto, ma a quanto pare si dovrebbe prestare attenzione solo al 1 ° e al terzo paragrafo :) –
Nessun problema. Tutti abbiamo imparato. :) – woodykiddy
- 1. Qual è la differenza tra "Thread.currentThread(). GetName" e "this.getName"?
- 2. Qual è la differenza tra Microsoft.Office.Interop. * Versione 12 e 14?
- 3. Qual è la differenza tra la versione e la "versione runtime" in .Net?
- 4. Qual è la differenza tra la versione LTS e la versione stabile di node.js?
- 5. Qual è la differenza tra = e: =
- 6. Qual è la differenza tra Verilog! e ~?
- 7. Qual è la differenza tra? : e ||
- 8. qual è la differenza tra [[], []] e [[]] * 2
- 9. Qual è la differenza tra $ e $$?
- 10. Qual è la differenza tra ("") e (null)
- 11. Qual è la differenza tra dict() e {}?
- 12. Qual è la differenza tra " " e ""?
- 13. Qual è la differenza tra {0} e ""?
- 14. Qual è la differenza tra `##` e `hashCode`?
- 15. Qual è la differenza tra {0} e +?
- 16. Qual è la differenza tra .ToString() e + ""
- 17. qual è la differenza tra:.! e: r !?
- 18. Qual è la differenza tra "aspnet_regiis -ir" e "aspnet_regiis -iru"?
- 19. Qual è la differenza tra `Enum.name()` e `Enum.toString()`?
- 20. Qual è la differenza tra "dipendenze" e "frameworkAssemblies" in project.json?
- 21. Qual è la differenza tra AppDomain.CreateInstance e Activator.CreateInstance?
- 22. Qual è la differenza tra il ramo dalla versione per area di lavoro e dall'ultima versione
- 23. Qual è la differenza tra la versione v2.0.50727.3053 e v2.0.50727.3074 del framework .Net?
- 24. Qual è la differenza tra la [OptionalField] e [NonSerialized]
- 25. Qual è la differenza tra "atomico" e "cstdatomic"?
- 26. Qual è la differenza tra `@ Bind` e` @ BindView` in butterknife?
- 27. Qual è la differenza tra gmake e make?
- 28. Qual è la differenza tra lowagie e iText?
- 29. Impossibile chiamare Assembly.GetName() dall'applicazione Silverlight
- 30. Qual è la differenza tra commit e aggiornamento?
Sei sicuro di quella logica? –
@Brandon: Sì, lo sono. :) – Sven
Bene +1 in questo caso! –