Freigeben über


let-Bindungen in Klassen (F#)

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

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

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

Hinweise

Die vorangehende Syntax befindet sich hinter der Klassenüberschrift und den Vererbungsdeklarationen, jedoch vor ggf. vorhandenen Memberdefinitionen. Die Syntax entspricht der Syntax von let-Bindungen außerhalb von Klassen, jedoch ist der Gültigkeitsbereich der in einer Klasse definierten Namen auf die Klasse beschränkt. Mit einer let-Bindung wird ein privates Feld oder eine private Funktion erstellt. Wenn Daten oder Funktionen öffentlich verfügbar gemacht werden sollen, deklarieren Sie eine Eigenschaften- oder Membermethode.

Eine let-Bindung, die nicht statisch ist, wird als Instanz-let-Bindung bezeichnet. Instanz-let-Bindungen werden ausgeführt, wenn Objekte erstellt werden. Statische let-Bindungen sind Teil des statischen Initialisierers für die Klasse, der auf jeden Fall vor der ersten Verwendung des Typs ausgeführt wird.

Im Code von Instanz-let-Bindungen können die Parameter des primären Konstruktors verwendet werden.

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

In den folgenden Codebeispielen werden verschiedene Typen von let-Bindungen in Klassen veranschaulicht.

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 Verfahren zum Erstellen von Feldern

Sie können ein privates Feld auch mithilfe des val-Schlüsselworts erstellen. Bei Verwendung des val-Schlüsselworts wird dem Feld kein Wert zugewiesen, wenn das Objekt erstellt wird, sondern es wird stattdessen mit einem Standardwert initialisiert. Weitere Informationen finden Sie unter Explizite Felder: Das val-Schlüsselwort (F#).

Sie können auch private Felder in einer Klasse definieren, indem Sie eine Memberdefinition verwenden und der Definition das Schlüsselwort private hinzufügen. Dies kann sinnvoll sein, wenn Sie davon ausgehen, dass Sie den Zugriff eines Members ändern, und den Code nicht neu schreiben möchten. Weitere Informationen finden Sie unter Zugriffssteuerung (F#).

Siehe auch

Referenz

do-Bindungen in Klassen (F#)

let-Bindungen (F#)

Konzepte

Member (F#)