Condividi tramite


Associazioni let nelle classi (F#)

È possibile definire campi privati e funzioni private per le classi F# utilizzando associazioni let nella definizione di classe.

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

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

Note

La sintassi precedente appare dopo l'intestazione della classe e le dichiarazioni di ereditarietà ma prima di qualsiasi definizione di membro. La sintassi è analoga a quella delle associazioni let all'esterno delle classi, ma i nomi definiti in una classe hanno un ambito limitato alla classe. Un'associazione let consente di creare una funzione o un campo privato. Per esporre pubblicamente dati o funzioni, dichiarare una proprietà o un metodo del membro.

Un'associazione let non statica è detta associazione let di istanza. Le associazioni let di istanza vengono eseguite quando vengono creati gli oggetti. Le associazioni let statiche fanno parte dell'inizializzatore statico per la classe, che viene sempre eseguito prima che il tipo venga utilizzato per la prima volta.

Il codice all'interno di associazioni let di istanza può utilizzare i parametri del costruttore primario.

Gli attributi e i modificatori di accessibilità non sono consentiti nelle associazioni let nelle classi.

Negli esempi di codice seguenti vengono illustrati diversi tipi di associazioni let 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

Modalità alternative di creazione di campi

È anche possibile utilizzare la parola chiave val per creare un campo privato. Quando si utilizza la parola chiave val, al campo non viene assegnato un valore quando viene creato l'oggetto. Il campo viene invece inizializzato con un valore predefinito. Per ulteriori informazioni, vedere Campi espliciti: parola chiave val (F#).

È anche possibile definire campi privati in una classe utilizzando 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 ulteriori informazioni, vedere Controllo di accesso (F#).

Vedere anche

Riferimenti

Associazioni do nelle classi (F#)

Associazioni let (F#)

Concetti

Membri (F#)