Compartilhar via


Associações do em classes (F#)

A do ligação em uma definição de classe executa ações quando o objeto é construído ou, para obter um endereço do de ligação, quando o tipo é usado pela primeira vez.

[static] do expression

Comentários

A do vinculação aparece junto com ou após a let ligações, mas antes de definições de membro em uma definição de classe. Embora o do palavra-chave é opcional para do ligações no nível de módulo, não é opcional para do ligações em uma definição de classe.

Para a construção de cada objeto de qualquer dado tipo, non-static do não-static e ligações let as ligações são executadas na ordem em que aparecem na definição de classe. Vários do ligações podem ocorrer em um tipo. Non-static let não-static e ligações do ligações tornam-se o corpo do construtor primário. O código não-static do seção vinculações pode referenciar os parâmetros do construtor primário e quaisquer valores ou funções que são definidas na let seção vinculações.

Não-estático do ligações podem acessar os membros da classe, desde que a classe tem um identificador de auto-que é definido por um as palavra-chave na classe título e, desde que todos os usos desses membros são qualificados com o auto-identificador da classe.

Porque let ligações inicializar os campos particulares de uma classe, que geralmente é necessário para garantir que os membros se comportar conforme o esperado, do ligações são geralmente colocadas após let ligações, para que o código do do vinculação pode ser executados com um objeto totalmente inicializado. Se o código tenta usar um membro antes da inicialização estiver concluída, um InvalidOperationException é gerado.

Estático do ligações podem referenciar membros estáticos ou campos de circunscrito de classe, mas não membros ou campos de instância. Estático do ligações se tornam parte do inicializador estático para a classe, que é garantido para executar antes que a classe é usada pela primeira vez.

Atributos são ignorados para do ligações em tipos. Se um atributo é necessário para o código que é executado em um do de vinculação, ele deve ser aplicado para o construtor primário.

No código a seguir, uma classe tem um estático do ligação e não-static do vinculação. O objeto tem um construtor que possui dois parâmetros, a e b, e dois campos particulares estão definidos na let ligações para a classe. Duas propriedades também são definidas. Todos esses recursos estão no escopo em non-static do seção vinculações, 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 é da seguinte maneira.

Initializing MyType.
Initializing object 1 2 2 4 8 16

Consulte também

Referência

Classes (F#)

Associações let em classes (F#)

Associações do (F#)

Conceitos

Construtores (F#)

Outros recursos

Membros (F#)