Ich möchte eine Methode definieren, die von allen Mitgliedern einer diskriminierten Gewerkschaft geteilt wird. Momentan habe ich es so implementiert, aber es scheint wirklich unelegant - sicherlich gibt es einen besseren Weg. Vorschläge?
%Vor%Was ist mit so etwas?
%Vor%Dies setzt voraus, dass Sie möchten, dass jede Variante Ihres Sum-Typs (diskriminierte Vereinigung) mit dem float-Parameter etwas anderes macht.
Für den Fall von A
gebe ich einfach den ursprünglichen Wert zurück, da ich sonst nicht viel machen kann (da es keine allgemein nützliche Beziehung zwischen string
und float
gibt, die float
ergibt).
In Ihrem Beispiel haben Sie augmentiert die Datensätze -Typen A
und B
jeweils mit einem Instanzmitglied. Sie können jedoch nicht nur Datensatztypen erweitern, können Sie auch erweitern Vereinigung Typen (wie in @ Rodrick Antwort gezeigt). Wenn Sie dies tun, wird die Erweiterung der Gewerkschaft von jedem DU-Fall "geteilt", was Sie gefragt haben. Um dies deutlicher zu machen, habe ich einige Teile Ihres Beispiels umbenannt:
Wenn Sie den kompilierten Code im Objekt-Browser (oder einem Decompiler wie ILSpy) betrachten, sehen Sie, dass AB
als Basisklasse der beiden Unterklassen AB.ACase
und AB.BCase
und SharedMethod
kompiliert ist. gehört zur Basisklasse AB
.
Siehe auch Abschnitt 8.5.1 der F # 3.0-Spezifikation : Mitglieder in Unionstypen.
Tags und Links f# inheritance discriminated-union