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