let-Bindungen in Klassen

Sie können private Felder und private Funktionen für F#-Klassen mit let-Bindungen in der Klassendefinition definieren.

Syntax

// Field.
[static] let [ mutable ] binding1 [ and ... binding-n ]

// Function.
[static] let [ rec ] binding1 [ and ... binding-n ]

Bemerkungen

Die vorherige Syntax wird nach der Klassenüberschrift und Vererbungsdeklarationen, aber vor allen Memberdefinitionen angezeigt. Die Syntax ähnelt der von let-Bindungen außerhalb von Klassen, aber der Bereich von in einer Klasse definierten Namen ist auf die Klasse beschränkt. Eine let-Bindung erstellt ein privates Feld oder eine private Funktion. Um Daten oder Funktionen öffentlich verfügbar zu machen, deklarieren Sie eine Eigenschaft oder eine Membermethode.

Eine let-Bindung, die nicht statisch ist, wird als let-Instanzbindung bezeichnet. let-Instanzbindungen werden beim Erstellen von Objekten ausgeführt. Statische let-Bindungen sind Teil des statischen Initialisierers für die Klasse, der garantiert ausgeführt wird, bevor der Typ zum ersten Mal verwendet wird.

Der Code in let-Instanzbindungen kann die Parameter des primären Konstruktors verwenden.

Attribute und Zugriffsmodifizierer sind für let-Bindungen in Klassen nicht zulässig.

Die folgenden Codebeispiele veranschaulichen mehrere Arten von let-Bindungen in Klassen.

type PointWithCounter(a: int, b: int) =
    // A variable i.
    let mutable i = 0

    // A let binding that uses a pattern.
    let (x, y) = (a, b)

    // A private function binding.
    let privateFunction x y = x * x + 2 * y

    // A static let binding.
    static let mutable count = 0

    // A do binding.
    do count <- count + 1

    member this.Prop1 = x
    member this.Prop2 = y
    member this.CreatedCount = count
    member this.FunctionValue = privateFunction x y

let point1 = PointWithCounter(10, 52)

printfn "%d %d %d %d" (point1.Prop1) (point1.Prop2) (point1.CreatedCount) (point1.FunctionValue)

Die Ausgabe lautet wie folgt.

10 52 1 204

Alternative Möglichkeiten zum Erstellen von Feldern

Sie können ein privates Feld auch mit dem Schlüsselwort val erstellen. Bei Verwendung des Schlüsselworts val erhält das Feld beim Erstellen des Objekts keinen Wert, sondern wird mit einem Standardwert initialisiert. Weitere Informationen finden Sie unter Explizite Felder: Das val-Schlüsselwort.

Sie können auch private Felder in einer Klasse definieren, indem Sie eine Memberdefinition verwenden und dieser das Schlüsselwort private hinzufügen. Dies kann nützlich sein, wenn Sie erwarten, den Zugriff auf ein Element zu ändern, ohne Ihren Code neu zu schreiben. Weitere Informationen finden Sie unter Zugriffssteuerung.

Siehe auch