Interface 发布实现接口的F#类时的反射/C#键入错误
我有一个用C#编写的接口,但在用F#实现它时,我注意到了一些奇怪之处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); } 下面的代码无法编译 错
- 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)