Во-первых, пример чего-то, что работает как ожидалось: (весь код был выполнен в непосредственном окне VS2008)
25 is IComparable
>> true
25.GetType().GetInterfaces()
>> {System.Type[5]}
>> [0]: {Name = "IComparable" FullName = ...
>> [1]: {Name = "IFormattable" FullName = ...
>> ...
Пока все хорошо. Теперь давайте попробуем создать объект, интерфейс которого наследуется через базовый тип:
class TestBase : IComparable
{
public int CompareTo(object obj) { throw new NotImplementedException(); }
}
class TheTest : TestBase { }
В ближайшем окне:
(new TheTest()) is IComparable
>> true
(new TheTest()).GetType().GetInterfaces()
>> {System.Type[1]}
>> [0]: {Name = "IComparable" FullName = "System.IComparable"}
Здесь тоже нет сюрпризов. Почему следующий код не показывает никаких интерфейсов:
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]}
Как все вышеперечисленное может быть правдой одновременно?
( edit : добавлено wcfChannel is ICommunicationObject
выше, что в настоящее время не объясняется ответом, объясняющим, как wcfChannel is IMyServiceApi
соответствует действительности.)