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