[英]Using bound interface in F#
我试图在F#中使用C#库,所以这将是非常具体的情况。 我使用Servicestack和F#。 现在,我正在尝试使用接口使用方法连接类
RegisterAutoWiredAs<T,'TAs>()
签名。 这是'T有约束,它必须实现'TA。 它在C#代码中工作正常。
但是F#在使用界面时有限制。
let f:IFoo = Foo() // will give type error
let fi:IFoo - Foo() :> IFoo // will work
在这里,Foo实施了IFoo。 所以,这部分与C#等价物完全不同。 现在,如果我这样做,上面的签名就会给出类型错误
container.RegisterAutoWiredAs<Foo,IFoo>()
现在有了在给出参数的同时进行铸造。
这是我试图运行的原始项目的行 。 此代码中的所有内容都与此部分不同,而且遗憾的是其他等效方法也失败了。
这是我在该项目中遇到的错误
该表达式预计具有“MemoryChatHistory”类型,但此处的类型为“IChatHistory”
F#不支持隐式接口实现。
我想你可以通过使IChatHistory成为一个抽象类而不是一个接口(使用[<AbstractClass>]
属性)来解决这个问题。
编辑:
不,我今天有机会玩弄它。 我认为用F#中的那些类型参数直接调用这个方法是不可能的。 看到这个问题
如何将`where T:U`泛型类型参数约束从C#转换为F#?
再讨论一下。
您可以通过使用反射来调用该方法来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.