Probar si el objeto implementa la interfaz
¿Cuál es la forma más sencilla de probar si un objeto implementa una interfaz determinada en C#? (Respuesta a esta pregunta en Java )
Aceptado
if (object is IBlah)
o
IBlah myTest = originalObject as IBlah
if (myTest != null)
Usar los operadores is
o as
es la forma correcta si conoce el tipo de interfaz en el momento de la compilación y tiene una instancia del tipo que está probando. Algo que nadie más parece haber mencionado es Type.IsAssignableFrom
:
if( typeof(IMyInterface).IsAssignableFrom(someOtherType) )
{
}
Creo que esto es mucho mejor que mirar la matriz devuelta por GetInterfaces
y tiene la ventaja de funcionar también para las clases.
Si desea utilizar el objeto encasillado después de la verificación:
Desde C# 7.0:
if (obj is IMyInterface myObj)
Esto es lo mismo que
IMyInterface myObj = obj as IMyInterface;
if (myObj != null)
Consulte Documentos .NET: descripción general de la coincidencia de patrones