Associazioni let nelle classi
È possibile definire campi privati e funzioni private per le classi F# usando let
le associazioni nella definizione della classe.
Sintassi
// Field.
[static] let [ mutable ] binding1 [ and ... binding-n ]
// Function.
[static] let [ rec ] binding1 [ and ... binding-n ]
Osservazioni:
La sintassi precedente viene visualizzata dopo l'intestazione della classe e le dichiarazioni di ereditarietà, ma prima di qualsiasi definizione di membro. La sintassi è simile a quella delle let
associazioni all'esterno delle classi, ma i nomi definiti in una classe hanno un ambito limitato alla classe . Un'associazione let
crea un campo o una funzione privata; per esporre pubblicamente dati o funzioni, dichiarare una proprietà o un metodo membro.
Un'associazione let
non statica viene chiamata associazione di istanza let
. Le associazioni di istanza let
vengono eseguite quando vengono creati oggetti. Le associazioni statiche let
fanno parte dell'inizializzatore statico per la classe , che viene garantita l'esecuzione prima dell'uso del tipo.
Il codice all'interno delle associazioni di istanza let
può usare i parametri del costruttore primario.
Gli attributi e i modificatori di accessibilità non sono consentiti nelle let
associazioni nelle classi.
Gli esempi di codice seguenti illustrano diversi tipi di let
associazioni nelle classi.
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)
L'output è indicato di seguito.
10 52 1 204
Modi alternativi per creare campi
È anche possibile usare la val
parola chiave per creare un campo privato. Quando si usa la val
parola chiave , al campo non viene assegnato un valore quando viene creato l'oggetto, ma viene inizializzato con un valore predefinito. Per altre informazioni, vedere Campi espliciti: parola chiave val.
È anche possibile definire campi privati in una classe usando una definizione di membro e aggiungendo la parola chiave private
alla definizione. Ciò può essere utile se si prevede di modificare l'accessibilità di un membro senza riscrivere il codice. Per altre informazioni, vedere Access Control.