Frage

Ich kann nicht die richtige Syntax finden einen Typ D für die Codierung, die eine Basisklasse B (geschrieben in C #) und seine Konstrukteure andere als die Basisklasse impliziten Konstruktor erbt:

C # -Code:

public class B
{
    private int _i;
    private float _f;
    public B()
    {
        _i = 0;
        _f = 0.0f;
    }
    public B(int i)
    {
        _i = 0;
        _f = 0.0f;
    }
    public B(int i, float f)
    {
        _i = i;
        _f = f;
    }
}

F # Code:

type D() =
    inherit B()
    //how to inherit from other constructors ?

Danke

War es hilfreich?

Lösung

ich einen Weg gefunden, es zu tun Dank dieses Blog !

type D =
    class
        inherit B

        new () = {
            inherit B()
        }
        new (i : int) = {
            inherit B(i)
        }
        new ((i,f) : int*single) = {
            inherit B(i, f)
        }
    end

Ja, es ist ein bisschen umständlich, aber wie Brian sagte, es ist nicht die Mehrheit der Fälle.

EDIT: Eigentlich Klasse / Ende Schlüsselwörter sind nicht zwingend, dass (so ich nehme zurück, was ich über Beschwerlichkeit sagte). Als Brian auf seinem Blog, sagte hier , folgert F # normalerweise die Art von Typ definiert ist, so dass dieser Tokens überflüssig / überflüssig.

type D =
    inherit B

    new () = {
        inherit B()
    }
    new (i : int) = {
        inherit B(i)
    }
    new ((i,f) : int*single) = {
        inherit B(i, f)
    }

Andere Tipps

Aus der Dokumentation: „Die Argumente für den Basisklassenkonstruktor erscheinen in der Liste der Argumente in der inherit-Klausel“ Zum Beispiel:

type D(i: int) =
   inherit B(i)

Ich bin nicht sicher, wenn Sie verschiedene Basisklassenkonstruktoren aus verschiedenen F # Bauer nennen kann, weil F # alle Konstrukteure erfordert durch den „primären“ Konstruktor zu gehen (da die primären Konstruktorargumente in Rahmen für die gesamte Klasse sind, so dass sie werden initialisiert). In Ihrem Fall, können Sie damit durchkommen, weil Ihre Basisklasse eine maximale Konstruktor hat:

type D(i : int, f : float) =
  inherit B(i, f)
  new(i : int) = D(i, 0.0)
  new() = D(0, 0.0)

Aber für eine Basisklasse ohne einen maximalen Konstruktor Ich bin nicht sicher, ob dies möglich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top