En primer lugar, un ejemplo de algo que funciona como se espera: (todo el código fue ejecutado en VS2008 ventana inmediata)¿Por qué el tipo de este objeto no muestra interfaces a través de la reflexión, a pesar de implementar al menos dos?
25 is IComparable
>> true
25.GetType().GetInterfaces()
>> {System.Type[5]}
>> [0]: {Name = "IComparable" FullName = ...
>> [1]: {Name = "IFormattable" FullName = ...
>> ...
Hasta aquí todo bien. Ahora vamos a tratar sobre un objeto en la interfaz se hereda a través de un tipo base:
class TestBase : IComparable
{
public int CompareTo(object obj) { throw new NotImplementedException(); }
}
class TheTest : TestBase { }
En la ventana inmediata:
(new TheTest()) is IComparable
>> true
(new TheTest()).GetType().GetInterfaces()
>> {System.Type[1]}
>> [0]: {Name = "IComparable" FullName = "System.IComparable"}
No hay sorpresas aquí tampoco. ¿Cómo es que el siguiente código no muestra ninguna interfaz a continuación:
wcfChannel = ChannelFactory<IMyServiceApi>.CreateChannel(binding, endpointAddress);
wcfChannel is IMyServiceApi && wcfChannel is ICommunicationObject
>> true
typeof(IMyServiceApi).IsInterface && typeof(ICommunicationObject).IsInterface
>> true
wcfChannel.GetType().GetInterfaces()
>> {System.Type[0]}
¿Cómo puede todo lo anterior sea cierto al mismo tiempo?
(edición: añadido wcfChannel is ICommunicationObject
arriba, que es en este momento no explicada por la respuesta que explica cómo wcfChannel is IMyServiceApi
es cierto.)
presumiblemente un efecto secundario del hecho de que este tipo se genera en tiempo de ejecución; por curiosidad, ¿es un ContextBoundObject? –
Más información: Visual Studio lo muestra como 'System.Runtime.Remoting.Proxies .__ TransparentProxy'. No se puede ver ContextBoundObject en ningún lado. –