Interface 发布实现接口的F#类时的反射/C#键入错误

Interface 发布实现接口的F#类时的反射/C#键入错误,interface,f#,binding,Interface,F#,Binding,我有一个用C#编写的接口,但在用F#实现它时,我注意到了一些奇怪之处 F#类必须先转换到接口,然后C#才能使用它 强制转换后,WPF无法读取其属性(绑定失败,SNOOP无法对其进行反射) 我可以用C#代码包装对象,一切正常 界面 public interface IInterpret { public string Name {get;} public IEnumberable<Project> Interpret(string text); } 下面的代码无法编译 错

我有一个用C#编写的接口,但在用F#实现它时,我注意到了一些奇怪之处

  • F#类必须先转换到接口,然后C#才能使用它
  • 强制转换后,WPF无法读取其属性(绑定失败,SNOOP无法对其进行反射)
  • 我可以用C#代码包装对象,一切正常
界面

public interface IInterpret {
  public string Name {get;}
  public IEnumberable<Project> Interpret(string text);
}
下面的代码无法编译 错误是关于解释器没有实现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);
    }
}
公共类MyProxy:IInterpret{
私人解释保险;
公共MyProxy(){
_cover=新的FSharpLib.Interperter()作为解释;
}
公共字符串名称{get{return}cover.Name;}
公共IEnumerable解释(字符串文本){
返回-封面解释(文本);
}
}
我的F#class def有什么地方做错了吗?或者需要代理吗?我使用的是当前的VS2010 f#,而不是带外拖放。

f#显式实现所有接口。这意味着您必须显式转换为接口类型

我对WPF绑定到显式接口知之甚少,但看看这些

帮忙?(我刚刚发现他们正在为“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)

如果您“显式地隐式地实现接口”,请原谅这一混淆的术语。)

FYI:new在F#构造函数上是可选的,并且习惯上仅与实现IDisposableThanks的类型一起使用,以便于理解。我忽略了显式的实现位以及对绑定的影响。
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)