Compartilhar via


fazer ligações de Classes (F#)

A do a ligação em uma definição de classe executa ações quando o objeto é construído ou, para um estático 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 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 non-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 non-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 de ligações.

Não-estático do ligações podem acessar os membros da classe como a classe tem um identificador de auto é definido por um as palavra-chave na classe de título e como todos os usos desses membros qualificado com o identificador de auto para a 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 de do vinculação pode ser executado 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 do delimitador classe, mas não os membros de instância ou campos. 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, ela deverá ser aplicada para o construtor primário.

No código a seguir, uma classe tem um estático do a ligação e não-static do de 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 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#)

Deixe as ligações de Classes (F#)

fazer ligações (F#)

Conceitos

Membros (F#)

Construtores (F#)