После этой статьи я успешно перевел объявление класса / интерфейса C ++ COM в C # следующим образом:
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid(IfaceGuid)]
public interface IFoo
{
void Bar();
}
[ComImport, Guid(ClassGuid)]
public class Foo
{ }
Я использую это так:
var foo = new Foo();
var ifoo = (IFoo)foo;
ifoo.Bar();
Мой вопрос: как это может работать, учитывая, что Foo
не реализует IFoo
(даже во время выполнения, typeof(Foo).GetInterfaces()
пусто) и что пользовательские преобразования в интерфейсы запрещены?
Эта специальная обработка зарезервирована только для COM? Что спецификация C # должна сказать по этому поводу?