2011-11-18 7 views

risposta

12

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.

+0

Sei sicuro di quella logica? –

+0

@Brandon: Sì, lo sono. :) – Sven

+1

Bene +1 in questo caso! –

3

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.

+0

spiegazioni Impressionante, Brandon. Grazie mille. – woodykiddy

+0

@woodykiddy Benvenuto, ma a quanto pare si dovrebbe prestare attenzione solo al 1 ° e al terzo paragrafo :) –

+0

Nessun problema. Tutti abbiamo imparato. :) – woodykiddy

Problemi correlati