2010-09-05 10 views
5

I seguenti frammenti di codice sono equivalenti?è l'operatore "è" solo zucchero sintattico per il metodo "IsInstanceOfType"

class a 
{} 

class b:a 
{} 

b foo=new b(); 

// qui si tratta

foo is a 

//...is lo stesso ...

typeof(a).isinstanceoftype(foo) 

O forse uno degli altri metodi tipo di mappa più vicino al è un operatore. ad es. "IsAssignableFrom" o "IsSubclassOf"

+0

Correlato: http://stackoverflow.com/questions/2251310/why-is-is-implemented-as-as –

risposta

3

No, non lo è. Infatti, se sbirci su IsInstanceOfType vedrai che la prima riga di codice esegue effettivamente un confronto usando is, che in effetti avrebbe portato a uno StackOverflowException se fosse il caso.

L'operatore is porta a un'operazione isinst nel codice IL.

+0

sembra che l'implementazione di IsInstanceOfType sia molto più semplice in .Net 4.0. Fondamentalmente si limita a delegare a IsAssignableFrom. – rudimenter

6

Non lo è, perché is è tollerante al riferimento nullo sul lato sinistro.

4

non è la stessa come is si traduce nella isinst codice operativo che IsInstanceOf è una chiamata virtuale normale Type.

Problemi correlati