F # Schnittstellen und Eigenschaften

7

Ich versuche, F # in den Griff zu bekommen, und dabei konvertiere ich etwas C # -Code. Ich habe Probleme mit der Definition von Eigenschaften in einer Schnittstelle und ihrer Implementierung in einem Typ.

Betrachten Sie den folgenden Code:

%Vor%

Die Dokumentation für F # -Eigenschaften scheint anzugeben, dass meine Implementierung von MyProp in MyType korrekt ist der Compiler beklagt sich jedoch, dass "der Wert oder der Konstruktor 'MyProp' nicht definiert ist". Irgendwelche Ideen?

    
Eyvind 05.08.2015, 07:04
quelle

3 Antworten

13

Um auf die Eigenschaft innerhalb einer (expliziten) Schnittstelle zuzugreifen, müssen Sie in den self Verweis auf den Schnittstellentyp umwandeln:

%Vor%

Sie erhalten denselben Fehler in C #, wenn Sie die Schnittstelle explizit implementieren, und für den Zugriff auf das Member ist außerdem eine Umwandlung erforderlich:

%Vor%     
Phillip Trelford 05.08.2015, 08:01
quelle
6

Wenn Sie nur auf die Schnittstelle zugreifen, müssen Sie keine Member im Typ selbst definieren. Phils Antwort ist gut, wenn du Minimalismus willst, aber einen anderen Ansatz Ich mag es, "Let-gebundene" Werte anstelle von Membern zu verwenden - für komplexeren Code ist Typ-Inferenz besser und sie sind im Allgemeinen einfacher zu handhaben als Mitglieder.

%Vor%

Der Code ist etwas sauberer als die Mitgliedsversionen, imo, weil das self -Tag in type MyType() as self wird nur benötigt, um auf Mitglieder zuzugreifen - auf gebundene Werte kann direkt von der Schnittstelle zugegriffen werden.

    
Grundoon 05.08.2015 08:26
quelle
4

Hier ist eine funktionierende Version:

%Vor%

Bitte beachten Sie, dass ich die expliziten Mitglieder einbezogen habe, wie Sie sie sicherlich verpasst hätten;)

    
Carsten 05.08.2015 07:39
quelle