2013-04-22 92 views
4

我们可以在F#中嵌入互操作类型吗?在F#中嵌入互操作类型#

首先,我没有看到在引用中这样做的选项。

其次,如果我嵌入在C#中的类型,它告诉我引用的接口,而不是具体类:

//DBEngine is the interface DBEngineClass is the concrete class 

//if I dont embed the interop 

//Valid 
var dbe = new Microsoft.Office.Interop.Access.Dao.DBEngineClass(); 
//Valid 
var dbe = new Microsoft.Office.Interop.Access.Dao.DBEngine(); 


//if I do embed the interop 
//Invalid 
var dbe = new Microsoft.Office.Interop.Access.Dao.DBEngineClass(); 
//Valid 
var dbe = new Microsoft.Office.Interop.Access.Dao.DBEngine(); 

然而,F#一直想拥有的具体类的引用。 有没有办法解决这个问题?

回答

1

也许我不明白你的问题,但这个工作得很好,引用v14.0:

open Microsoft.Office.Interop.Access.Dao 
let dbe = DBEngineClass() :> DBEngine 
+0

确实如此,但您仍然指示二进制文件实际绑定到版本v14.0特定的类。 COM有这种接口的概念,现在显然在C#中语言层面出现。这就是为什么你可以新建一个界面! – nicolas 2013-04-23 13:48:02

+0

这个想法是,我不在乎哪个客户端库将实现接口。我将这种通用性推向了负责遵守它的运行时。 – nicolas 2013-04-23 13:49:04

2

刘涛谈论你从F#做发现正确的类实例化一些额外的工作here。据我所知,没有办法嵌入互操作类型。我会很高兴被证明是错误的。 :)

相关问题