Partager via


Liaisons let dans des classes

Vous pouvez définir des champs et fonctions privés pour les classes F# à l’aide de liaisons let dans la définition de classe.

Syntaxe

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

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

Notes

La syntaxe précédente apparaît après les déclarations d’en-tête de classe et d’héritage, mais avant les définitions de membres. La syntaxe est similaire à celle des liaisons let en dehors des classes, mais les noms définis dans une classe ont une étendue limitée à cette dernière. Une liaison let crée un champ privé ou une fonction ; pour exposer publiquement des données ou des fonctions, déclarez une propriété ou une méthode membre.

Une liaison let qui n’est pas statique est appelée liaison d’instance let. Les liaisons d’instance let s’exécutent lorsque des objets sont créés. Les liaisons statiques let font partie de l'initialisateur statique pour la classe, qui est garantie d’être exécutée avant que le type soit utilisé pour la première fois.

Le code dans les liaisons d’instance let peut utiliser les paramètres du constructeur principal.

Les attributs et les modificateurs d’accessibilité ne sont pas autorisés sur les liaisons let dans les classes.

Les exemples de code suivants illustrent plusieurs types de liaisons let dans les classes.

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)

La sortie est la suivante.

10 52 1 204

Autres façons de créer des champs

Vous pouvez également utiliser le mot-clé val pour créer un champ privé. Lorsque vous utilisez le mot-clé val, le champ n’a pas de valeur lorsque l’objet est créé, mais il est initialisé avec une valeur par défaut. Pour plus d’informations, consultez Champs explicites : le mot-clé val.

Vous pouvez également définir des champs privés dans une classe à l’aide d’une définition de membre et ajouter le mot-clé private à la définition. Cela peut être utile si vous prévoyez de modifier l’accessibilité d’un membre sans réécrire votre code. Pour obtenir plus d'informations, voir Contrôle d'accès.

Voir aussi