Compartilhar via


Associações let em classes

Você pode definir campos privados e funções privadas para classes F# usando associações let na definição de classe.

Sintaxe

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

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

Comentários

A sintaxe anterior aparece após o título da classe e declarações de herança, mas antes de qualquer definição de membro. A sintaxe é semelhante à das associações let fora das classes, mas os nomes definidos em uma classe têm um escopo limitado à classe. Uma associação let cria um campo ou uma função privada; para expor dados ou funções publicamente, declarar uma propriedade ou um método membro.

Uma associação let que não é estática é chamada de associação de instância let. As associações de instância let são executadas quando os objetos são criados. As associações estáticas let fazem parte do inicializador estático da classe, que tem a garantia de ser executada antes que o tipo seja usado pela primeira vez.

O código dentro de associações let de instância pode usar os parâmetros do construtor primário.

Atributos e modificadores de acessibilidade não são permitidos em associações let em classes.

Os exemplos de código a seguir ilustram vários tipos de associações let em 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)

A saída é a seguinte.

10 52 1 204

Maneiras alternativas de criar campos

Você também pode usar a palavra-chave val para criar um campo privado. Ao usar a palavra-chave val, o campo não recebe um valor quando o objeto é criado, mas, em vez disso, é inicializado com um valor padrão. Para mais informações, confira Campos explícitos: a palavra-chave val.

Você também pode definir campos privados em uma classe usando uma definição de membro e adicionando a palavra-chave private à definição. Isso pode ser útil se você espera alterar a acessibilidade de um membro sem reescrever o código. Para mais informações, consulte Controle de acesso.

Confira também