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?
Um auf die Eigenschaft innerhalb einer (expliziten) Schnittstelle zuzugreifen, müssen Sie in den self
Verweis auf den Schnittstellentyp umwandeln:
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%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.
Tags und Links f# interface automatic-properties