deixar Ligações em Classes
Você pode definir campos privados e funções privadas para classes F# usando let
associações na definição de classe.
Sintaxe
// Field.
[static] let [ mutable ] binding1 [ and ... binding-n ]
// Function.
[static] let [ rec ] binding1 [ and ... binding-n ]
Observações
A sintaxe anterior aparece após o título da classe e as declarações de herança, mas antes de qualquer definição de membro. A sintaxe é como a de let
ligações fora de classes, mas os nomes definidos em uma classe têm um escopo limitado à classe. Uma let
associação cria um campo ou função privada, para expor dados ou funções publicamente, declarar uma propriedade ou um método membro.
Uma let
associação que não é estática é chamada de vinculação de instância let
. As associações de instância let
são executadas quando os objetos são criados. As ligações estáticas let
fazem parte do inicializador estático para a classe, que é garantido para executar antes que o tipo seja usado pela primeira vez.
O código dentro de associações de instância let
pode usar os parâmetros do construtor primário.
Atributos e modificadores de acessibilidade não são permitidos em let
associações em classes.
Os exemplos de código a seguir ilustram vários tipos de let
associações 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
Formas alternativas de criar campos
Você também pode usar a val
palavra-chave para criar um campo privado. Ao usar a val
palavra-chave, o campo não recebe um valor quando o objeto é criado, mas é inicializado com um valor padrão. Para obter mais informações, consulte 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 seu código. Para obter mais informações, consulte Controle de acesso.