Dela via


let Bindings in Classes

Du kan definiera privata fält och privata funktioner för F#-klasser med hjälp let av bindningar i klassdefinitionen.

Syntax

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

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

Kommentarer

Den tidigare syntaxen visas efter klassrubriken och arvsdeklarationerna men före eventuella medlemsdefinitioner. Syntaxen liknar let bindningar utanför klasser, men namnen som definieras i en klass har ett omfång som är begränsat till klassen. En let bindning skapar ett privat fält eller en funktion. För att exponera data eller funktioner offentligt deklarerar du en egenskap eller en medlemsmetod.

En let bindning som inte är statisk kallas en instansbindning let . Instansbindningar let körs när objekt skapas. Statiska let bindningar är en del av den statiska initiatorn för klassen, som garanterat körs innan typen först används.

Koden i instansbindningar let kan använda den primära konstruktorns parametrar.

Attribut och hjälpmedelsmodifierare tillåts inte för let bindningar i klasser.

Följande kodexempel illustrerar flera typer av let bindningar i klasser.

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)

Utdata är följande.

10 52 1 204

Alternativa sätt att skapa fält

Du kan också använda nyckelordet val för att skapa ett privat fält. När du använder nyckelordet val får fältet inte något värde när objektet skapas, utan initieras i stället med ett standardvärde. Mer information finns i Explicita fält: Val-nyckelordet.

Du kan också definiera privata fält i en klass med hjälp av en medlemsdefinition och lägga till nyckelordet private i definitionen. Detta kan vara användbart om du förväntar dig att ändra tillgängligheten för en medlem utan att skriva om koden. Mer information finns i Åtkomstkontroll.

Se även