我有一个用 C# 编写的接口,但在用 F# 实现它时,我注意到一些奇怪的地方。
- F# 类必须先转换为接口,然后 C# 才能使用它
- 转换后,WPF 无法读取其属性(绑定失败且 SNOOP 无法反映它)
- 我可以用 C# 代码包装该对象,一切正常。
界面
public interface IInterpret {
public string Name {get;}
public IEnumberable<Project> Interpret(string text);
}
F# 级
type Interpreter()=
interface IInterpret with
member x.Name = "FParsec Based"
member x.Interpret(str) = Seq.empty
下面的代码无法编译该错误是关于解释器未实现 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# 类定义是否有问题,或者是否需要代理?我正在使用当前的 VS2010 f#,而不是带外下降。
F# 显式实现所有接口。这意味着您必须显式转换为接口类型。
我不太了解 WPF 绑定到显式接口,但看看这些是否
http://leecampbell.blogspot.com/2008/09/generic-binding-in-wpf-through-explicit.html 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 http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/92a2a3ba-74a6-4c79-9c75-f42d232a4dbf
帮助? (我刚刚发现他们 Bing-ing 表示“wpf 绑定显式接口”。)
(另一种选择可能是做类似的事情
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)
如果您原谅令人困惑的术语,那么您“隐式显式实现接口”。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)