我正在处理一些Interop代码,需要实例化一个接口。
C#中的等价物是:
Interop.SomeInterface theInterface;
theInterface = new Interop.SomeInterface();
theInterface.SomeEvent += new SomeEventHandler(...);
如何在F#中实现此接口的实例化?我是否需要将此互操作dll重新包装成F#可以理解的内容?
答案 0 :(得分:8)
实例化接口是不可能的。 The C# compiler is pulling a trick通过查找接口的实现者来实例化一个类。这是由编译器检查CoClassAttribute
。
据我所知,F#对CoClassAttribute
一无所知,因此您需要更改代码,以便实例化实际的类,而不是接口。
通过使用Reflector,ILdasm或任何其他元数据检查器查看SomeInterface上的CoClassAttribute,您可以找出所需的类。如果使用tlbimp或visual studio生成interop包装器,通常按类型将该类命名为SomeInterfaceClass。