Enlaces let en clases (F#)
Se pueden definir campos privados y funciones privadas para las clases de F# mediante enlaces let en la definición de clase.
// Field.
[static] let [ mutable ] binding1 [ and ... binding-n ]
// Function.
[static] let [ rec ] binding1 [ and ... binding-n ]
Comentarios
La sintaxis anterior aparece después del encabezado de clase y las declaraciones de herencia, pero antes de las definiciones de miembro. La sintaxis es similar a la de los enlaces let fuera de las clases, pero los nombres definidos en una clase tienen un ámbito limitado a la clase. Un enlace let crea un campo privado o una función privada. Para exponer datos o funciones públicamente, se debe declarar una propiedad o un método miembro.
Un enlace let que no es estático se denomina enlace let de instancia. Los enlaces let de instancia se ejecutan cuando se crean objetos. Los enlaces let estáticos forman parte del inicializador estático de la clase, que se ejecuta antes de que se use el tipo por primera vez.
El código en los enlaces let de instancia puede usar los parámetros del constructor primario.
En las clases, no se permite el uso de atributos ni modificadores de accesibilidad en los enlaces let.
En los ejemplos de código siguientes, se muestran varios tipos de enlaces let en clases.
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 salida es la siguiente.
10 52 1 204
Otras formas de crear campos
También se puede utilizar la palabra clave val para crear un campo privado. Cuando se usa la palabra clave val, no se le asigna al campo un valor cuando se crea el objeto, sino que se inicializa con un valor predeterminado. Para obtener más información, vea Campos explícitos: palabra clave val (F#).
Asimismo, se pueden definir campos privados en una clase usando una definición de miembro y agregando la palabra clave private a la definición. Esto puede resultar útil si se prevé cambiar la accesibilidad de un miembro sin reescribir el código. Para obtener más información, vea Control de acceso (F#).