J'ai une interface écrite en C#, mais en l'implémentant en F #, j'ai remarqué quelques bizarreries.Erreurs de typage Réflexion/C# lors de la publication d'une classe F # implémentant une interface
- Le F # classe doit être jeté à l'interface avant C# peut consommer
- Après la coulée, WPF ne peut pas lire les propriétés est (Manchettes a échoué et SNOOP n'a pas pu y réfléchir)
- I peut envelopper l'objet dans le code C# et tout fonctionne bien.
l'interface
public interface IInterpret {
public string Name {get;}
public IEnumberable<Project> Interpret(string text);
}
Le F # Classe
type Interpreter()=
interface IInterpret with
member x.Name = "FParsec Based"
member x.Interpret(str) = Seq.empty
Le code ci-dessous pour ne compiler L'erreur est de ne pas mettre en œuvre l'interprète IInterpert
public ViewModel(){
IInterpret i = new FSharpLib.Interperter();
}
Voici ma solution actuelle
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);
}
}
Y at-il quelque chose que je fais mal avec mon F # def classe, ou est le proxy nécessaire? J'utilise le VS2010 f # actuel, pas une goutte hors bande. F # implémente explicitement toutes les interfaces.
FYI: new est facultatif sur les constructeurs F #, et est utilisé idiomatiquement uniquement avec les types implémentant IDisposable – pblasucci