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.