2010-09-05 8 views
5

¿Son los siguientes fragmentos de código equivalentes?es el operador "es" solo azúcar sintáctico para el método "IsInstanceOfType"

class a 
{} 

class b:a 
{} 

b foo=new b(); 

// aquí se trata

foo is a 

//...is lo mismo que ...

typeof(a).isinstanceoftype(foo) 

O tal vez uno de los otros métodos de tipo de mapa más cerca de la es operador. p. "IsAssignableFrom" o "IsSubclassOf"

+0

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

Respuesta

3

No, no lo es. De hecho, si mira en IsInstanceOfType verá que la primera línea de código en realidad realiza una comparación usando is, que conduciría efectivamente a StackOverflowException si ese fuera el caso.

El operador is lleva a una operación isinst en el código IL.

+0

parece que la implementación de IsInstanceOfType es mucho más sencilla en .Net 4.0. Básicamente solo delega en IsAssignableFrom. – rudimenter

6

No lo es, porque is es tolerante a la referencia nula en el lado izquierdo.

4

No es lo mismo que is se traduce en el código de operación mientras que isinstIsInstanceOf es una llamada virtual normal sobre Type.

Cuestiones relacionadas