Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 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, as ligações não estáticas do e não estáticas let são executadas na ordem em que aparecem na definição de classe. Várias do ligações podem ocorrer em um tipo. As ligações não estáticas let e as ligações não estáticas do tornam-se o corpo do construtor primário. O código na seção de ligações não estáticas do pode fazer referência aos parâmetros primários do construtor e a 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 autoidentificador definido por uma as palavra-chave no cabeçalho da classe e desde que todos os usos desses membros sejam qualificados com o autoidentificador da 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 as associações para let 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 que a inicialização seja concluída, um InvalidOperationException será gerado.
As associações estáticas do podem fazer referência a membros estáticos ou campos da classe anexa, mas não a membros ou campos da instância. As ligações estáticas do tornam-se parte do inicializador estático para a classe, que é garantido para executar antes que a classe seja usada pela primeira vez.
Os atributos são ignorados para do associações em tipos. Se um atributo é necessário para o código que é executado em uma do ligação, ele deve ser aplicado ao construtor primário.
No código a seguir, uma classe tem uma ligação estática do e uma ligação não estática do . O objeto tem um construtor que tem dois parâmetros, a e b, e dois campos privados são definidos nas let associações para a classe. Duas propriedades também são definidas. Todos eles estão no escopo na seção de ligações não estáticas do , como é 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