Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Uma do associação em uma definição de classe executa ações quando o objeto é construído ou, para uma associação estática do , quando o tipo é usado pela primeira vez.
Sintaxe
[static] do expression
Observações
Uma do associação aparece junto com ou após let as associações, mas antes das definições de membro em uma definição de classe. Embora a do palavra-chave seja opcional para do associações no nível do módulo, ela não é opcional para do associações em uma definição de classe.
Para a construção de cada objeto de qualquer tipo específico, associações não estáticas do e associações não estáticas let são executadas na ordem em que aparecem na definição de classe. Várias do associações podem ocorrer em um tipo. As associações não estáticas let e as associações não estáticas do tornam-se o corpo do construtor primário. O código na seção associações não estáticas do pode referenciar os parâmetros do construtor primário e quaisquer valores ou funções definidos na let seção de associações.
As associações não estáticas do podem acessar membros da classe desde que a classe tenha um auto-identificador definido por uma as palavra-chave no título da classe e, desde que todos os usos desses membros sejam qualificados com o auto-identificador para a classe.
Como let as associações inicializam os campos privados de uma classe, o que geralmente é necessário para garantir que os membros se comportem conforme o esperado, do as associações geralmente são colocadas após let associações para que o do código na associação possa ser executado com um objeto totalmente inicializado. Se o código tentar usar um membro antes da conclusão da inicialização, uma InvalidOperationException será gerada.
Associações estáticas do podem referenciar membros estáticos ou campos da classe delimitante, mas não membros ou campos de instância. As associações estáticas do tornam-se parte do inicializador estático para a classe, o que é garantido para ser executado antes que a classe seja usada pela primeira vez.
Os atributos são ignorados para do associações em tipos. Se um atributo for necessário para o código executado em uma do associação, ele deverá ser aplicado ao construtor primário.
No código a seguir, uma classe tem uma associação estática do e uma associação não estática do . O objeto tem um construtor que tem dois parâmetros e bdois campos privados a são definidos nas let associações da classe. Duas propriedades também são definidas. Todas elas estão no escopo na seção associações não estáticas do , conforme ilustrado pela linha que imprime todos esses valores.
open System
type MyType(a: int, b: int) as this =
inherit Object()
let x = 2 * a
let y = 2 * b
do printfn "Initializing object %d %d %d %d %d %d" a b x y (this.Prop1) (this.Prop2)
static do printfn "Initializing MyType."
member this.Prop1 = 4 * x
member this.Prop2 = 4 * y
override this.ToString() =
System.String.Format("{0} {1}", this.Prop1, this.Prop2)
let obj1 = new MyType(1, 2)
A saída é a seguinte.
Initializing MyType.
Initializing object 1 2 2 4 8 16