Ошибки печати Reflection / C # при публикации класса F #, реализующего интерфейс - PullRequest
2 голосов
/ 08 ноября 2010

У меня есть интерфейс, написанный на C #, но при реализации его на F # я заметил некоторые странности.

  • Класс F # должен быть приведен к интерфейсу, прежде чем C # сможет его использовать
  • После приведения WPF не может прочитать его свойства (привязки не выполнены, и SNOOP не может отразить это)
  • Я могу обернуть объект в код 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 Ответ

2 голосов
/ 08 ноября 2010

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

помогите?(Я только что нашел их Bing-ing для «явных интерфейсов привязки 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)

, где вы «явно реализуете интерфейс неявно», если вы извините за запутанную терминологию.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...