代码之家  ›  专栏  ›  技术社区  ›  Ball

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

  •  2
  • Ball  · 技术社区  · 14 年前

    • 必须将F类强制转换到接口,然后C才能使用它
    • 我可以用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#,而不是带外下降。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Brian    14 年前

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

    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绑定显式接口”。)

    (另一种选择可能是

    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)
    

    如果您不介意这个令人费解的术语,您可以“显式地隐式地实现接口”