Liaisons let dans les classes (F#)
Vous pouvez définir des champs privés et des fonctions privées pour des classes F# à l'aide de liaisons let dans la définition de classe.
// 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 le titre de la classe et les déclarations d'héritage, mais avant les définitions de membre. La syntaxe est semblable à celle des liaisons let en dehors des classes, mais les noms définis dans une classe ont une portée limitée à la classe. Une liaison let crée un champ ou une fonction privé. Pour exposer publiquement des données ou des fonctions, déclarez une méthode de propriété ou membre.
Une liaison let qui n'est pas statique est appelée liaison let d'instance. Les liaisons let d'instance s'exécutent lorsque des objets sont créés. Les liaisons let statiques font partie de l'initialiseur statique pour la classe, dont l'exécution avant la première utilisation du type est garantie.
Le code dans les liaisons let d'instance 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 techniques de création de champs
Vous pouvez également utiliser le mot clé val pour créer un champ privé. Lors de l'utilisation du mot clé val, une valeur n'est pas affectée au champ lorsque l'objet est créé, mais le champ est initialisé avec une valeur par défaut. Pour plus d’informations, consultez Champs explicites : mot clé val (F#).
Vous pouvez également définir des champs privés dans une classe en utilisant une définition de membre et en ajoutant le mot clé private à la définition. Ceci peut s'avérer utile si vous voulez modifier l'accessibilité d'un membre sans réécrire votre code. Pour plus d’informations, consultez Contrôle d'accès (F#).
Voir aussi
Référence
Liaisons do dans les classes (F#)