2011-03-01 14 views
5

Ante este escenarioCómo comprobar que implementa objeto de interfaz

interface A {} 

class B : A {} 

A b = new B(); 

¿Cómo puedo comprobar que se crea desde la interfaz A que el objeto B?

+2

¿Qué quiere decir con "se crea desde la interfaz A"? Puede decir que puede usar el valor de 'b' como referencia a una implementación de' A' por el hecho de que está asignado a una variable de tipo 'A' ... aclare su pregunta. –

Respuesta

10

intenta utilizar is

if(b is A) 
{ 
    // do something 
} 

es eso lo que quieres?

+1

sí, por supuesto! esto era exactamente lo que estaba buscando! ¡Gracias! – Makach

5

que podría hacer probarlo de esta forma:

var b = new B(); 

var asInterface = x as A; 
if (asInterface == null) 
{ 
    //not of the interface A! 
} 
0

Encontramos que sea práctico para usar las siguientes:

IMyInterface = instance as IMyInterface; 
if (intance != null) 
{ 
//do stuff 
} 

'como' es el más rápido que 'es', también guarda una serie de moldes - si la instancia impelments IMyInterface, necesitará ningún más moldes.

+0

No estoy tan preocupado por la velocidad, semánticamente creo que es más apropiado usarlo – Makach

+0

@Dmitry - ¿tiene enlaces de prueba con pruebas ?. Porque acabo de probar 1000000000 iteración con "es" y "como" y "es" es un poco más rápido – Stecya

+0

allí va: http://stackoverflow.com/questions/496096/casting-vs-using-the-as-keyword- in-the-clr, también ¿qué vas a hacer después de que Devuelve true? ¿Lanzar de nuevo? :) –

Cuestiones relacionadas