Enlaces let en clases

Puedes definir campos privados y funciones privadas para las clases de F# mediante let enlaces en la definición de clase.

Sintaxis

// 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 cualquier definición de miembro. La sintaxis es similar a la de los enlaces fuera de let las clases, pero los nombres definidos en una clase tienen un ámbito limitado a la clase. Un let enlace crea un campo o función privado; para exponer datos o funciones públicamente, declara una propiedad o un método miembro.

Un let enlace que no es estático se denomina enlace de instancia let. Los enlaces de instancia let se ejecutan cuando se crean objetos. Los enlaces estáticos let forman parte del inicializador estático de la clase, que se garantiza que se ejecute antes de usar el tipo por primera vez.

El código de los enlaces de instancia let puede usar los parámetros del constructor principal.

Los atributos y los modificadores de accesibilidad no se permiten en let los enlaces de las clases.

En los ejemplos de código siguientes se muestran varios tipos de let enlaces 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

Formas alternativas de crear campos

También puedes usar la val palabra clave para crear un campo privado. Cuando se usa la palabra clave val, el campo no recibe un valor cuando se crea el objeto, sino que se inicializa con un valor predeterminado. Para obtener más información, consulta Campos explícitos: la palabra clave val.

También puedes definir campos privados en una clase mediante una definición de miembro y agregar la palabra clave private a la definición. Esto puede ser útil si esperas cambiar la accesibilidad de un miembro sin volver a escribir el código. Para obtener más información, consulta Access Control.

Consulte también