Partilhar via


fazer Ligações em Classes

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

Consulte também