我有一个用C#编写的接口,但是在用F#实现它时,我注意到了一些奇怪的东西。
界面
public interface IInterpret {
public string Name {get;}
public IEnumberable<Project> Interpret(string text);
}
F#Class
type Interpreter()=
interface IInterpret with
member x.Name = "FParsec Based"
member x.Interpret(str) = Seq.empty
以下代码无法编译 错误是关于Interpreter没有实现IInterpert
public ViewModel(){
IInterpret i = new FSharpLib.Interperter();
}
这是我目前的解决方法
public class MyProxy: IInterpret{
private IInterpret _cover;
public MyProxy() {
_cover = new FSharpLib.Interperter() as IInterpret;
}
public string Name { get { return _cover.Name; } }
public IEnumerable<Project> Interpret(string text){
return _cover.Interpret(text);
}
}
我的F#class def是否有问题,或者需要代理吗?我正在使用当前的VS2010 f#,而不是带外丢弃。
答案 0 :(得分:2)
F#显式实现所有接口。这意味着您必须显式转换为接口类型。
我不知道WPF绑定到显式接口,但看看这些
http://leecampbell.blogspot.com/2008/09/generic-binding-in-wpf-through-explicit.html
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/92a2a3ba-74a6-4c79-9c75-f42d232a4dbf
帮助? (我刚刚发现它们是用于“wpf绑定显式接口”的Binging。)
(另一种选择可能是做
之类的事情type Interpreter()=
member x.Name = "FParsec Based"
member x.Interpret(str:string) = Seq.empty
interface IInterpret with
member x.Name = x.Name
member x.Interpret(str) = x.Interpret(str)
如果您谅解这个令人困惑的术语,那么“隐式地显式实现接口”。