Wie ich die Methode Zero
in dem folgenden Code in einer solchen Art und Weise tun außer Kraft setzen, die ich Euro(0)
für die Definiton in der type Euro
Wie richtig überschreiben ich ein eingeschränktes Verfahren
[<AbstractClass>]
type Currency() =
abstract member Zero<'T when 'T :> Currency > : unit -> 'T
type Euro (value: int) =
inherit Currency()
member this.Value = value
override this.Zero() = Euro(0) :> _
'Zero' ist eine generische Methode und muss einen Wert für jeden Subtyp von' Currency' zurückgeben, den der Aufrufer auswählt, damit Sie ihn nicht in Ihrem 'Euro'-Typ reparieren können. Im Moment könnte ein Anrufer 'let c = new Euro (0):> Currency; c.Zero() '. Können Sie 'T' in die' Currency' Klasse verschieben? –
Lee
Ist das für alle praktischen Zwecke ein DU? Nein? –
@HelgeReneUrholm: Nein, in diesem Fall gibt es ein offenes Universum von Typen. Sie verlieren erschöpfende Übereinstimmungen, können aber neue Subtypen hinzufügen, ohne sie neu zu kompilieren (oder in anderen Dateien/Assemblies usw.). – scrwtp