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.