Compartilhar via


Associações do em classes

Uma associação do 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

Comentários

Uma associação do aparece com ou após as associações let, mas antes das definições de membro em uma definição de classe. Embora a palavra-chave do seja opcional para associações do no nível do módulo, ela não é opcional para associações do em uma definição de classe.

Para a construção de cada objeto de qualquer tipo determinado, associações não estáticas do e let são executadas na ordem em que aparecem na definição de classe. Várias associações do podem ocorrer em um tipo. As associações não estáticas let e do tornam-se o corpo do construtor primário. O código na seção de associações não estáticas do pode referenciar os parâmetros do construtor primário e quaisquer valores ou funções definidos na seção de associações let.

As associações não estáticas do podem acessar membros da classe, desde que ela tenha um auto-identificador definido por uma palavra-chave as no título da classe e desde que todos os usos desses membros sejam qualificados com o auto-identificador da classe.

Como as associações let inicializam os campos privados de uma classe, o que geralmente é necessário para garantir que os membros se comportem conforme o esperado, as associações do geralmente são colocadas após as associações let para que o código na associação do 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.

As associações estáticas do podem referenciar membros estáticos ou campos da classe que as inclui, mas não os membros ou campos da instância. As associações estáticas do fazem parte do inicializador estático da classe, que tem a garantia de ser executada antes que o tipo seja usado pela primeira vez.

Os atributos são ignorados para associações do em tipos. Se um atributo for necessário para o código executado em uma associação do, 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, a e b, e dois campos privados são definidos nas associações let da classe. Duas propriedades também são definidas. Todos eles estão no escopo na seção de associaçõ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

Confira também