Powiązania let w klasach

Można zdefiniować pola prywatne i funkcje prywatne dla klas języka F#, używając let powiązań w definicji klasy.

Składnia

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

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

Uwagi

Poprzednia składnia pojawia się po nagłówku klasy i deklaracjach dziedziczenia, ale przed definicjami składowych. Składnia jest podobna let do powiązań spoza klas, ale nazwy zdefiniowane w klasie mają zakres ograniczony do klasy. let Powiązanie tworzy pole prywatne lub funkcję; aby uwidocznić dane lub funkcje publicznie, zadeklarować właściwość lub metodę składową.

let Powiązanie, które nie jest statyczne, jest nazywane powiązaniem wystąpienialet. Powiązania wystąpień let są wykonywane podczas tworzenia obiektów. Powiązania statyczne let są częścią statycznego inicjatora klasy, który ma gwarancję wykonania przed pierwszym zastosowaniem typu.

Kod w powiązaniach wystąpień let może używać parametrów konstruktora podstawowego.

Atrybuty i modyfikatory ułatwień dostępu nie są dozwolone w let powiązaniach w klasach.

Poniższe przykłady kodu ilustrują kilka typów let powiązań w klasach.

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)

Dane wyjściowe są następujące:

10 52 1 204

Alternatywne sposoby tworzenia pól

Możesz również użyć słowa kluczowego val , aby utworzyć pole prywatne. W przypadku używania słowa kluczowego val pole nie otrzymuje wartości podczas tworzenia obiektu, ale zamiast tego jest inicjowane z wartością domyślną. Aby uzyskać więcej informacji, zobacz Jawne pola: słowo kluczowe val.

Możesz również zdefiniować pola prywatne w klasie przy użyciu definicji składowej i dodać słowo kluczowe private do definicji. Może to być przydatne, jeśli spodziewasz się zmienić dostępność elementu członkowskiego bez ponownego pisania kodu. Aby uzyskać więcej informacji, zobacz Kontrola dostępu.

Zobacz też