Condividi tramite


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.

Vedi anche