发布实现接口的F#类时,Reflection / C#输入错误

时间:2010-11-07 22:17:55

标签: interface f# binding

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

  • 在C#可以使用它之前,必须将F#类强制转换为接口
  • 投射后,WPF无法读取它的属性(绑定失败,SNOOP无法反映)
  • 我可以用C#代码包装对象,一切正常。

界面

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#,而不是带外丢弃。

1 个答案:

答案 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)

如果您谅解这个令人困惑的术语,那么“隐式地显式实现接口”。

相关问题