Condividi tramite


Associazioni do nelle classi

Un'associazione do in una definizione di classe esegue azioni quando l'oggetto viene costruito o, per un'associazione statica do , quando il tipo viene utilizzato per la prima volta.

Sintassi

[static] do expression

Osservazioni:

Un'associazione do viene visualizzata insieme o dopo let le associazioni, ma prima delle definizioni dei membri in una definizione di classe. Sebbene la do parola chiave sia facoltativa per do le associazioni a livello di modulo, non è facoltativa per do le associazioni in una definizione di classe.

Per la costruzione di ogni oggetto di qualsiasi tipo specificato, le associazioni non statiche e le associazioni non statiche dolet vengono eseguite nell'ordine in cui vengono visualizzate nella definizione della classe. Più do associazioni possono verificarsi in un solo tipo. Le associazioni non statiche e le associazioni non statiche letdo diventano il corpo del costruttore primario. Il codice nella sezione associazioni non statiche do può fare riferimento ai parametri del costruttore primario e a qualsiasi valore o funzione definiti nella let sezione binding.

Le associazioni non statiche do possono accedere ai membri della classe purché la classe disponga di un identificatore automatico definito da una as parola chiave nell'intestazione della classe e, purché tutti gli usi di tali membri siano qualificati con l'identificatore automatico per la classe.

Poiché let le associazioni inizializzano i campi privati di una classe, spesso necessario per garantire che i membri si comportino come previsto, do le associazioni vengono in genere inserite dopo let le associazioni in modo che il codice nell'associazione do possa essere eseguito con un oggetto completamente inizializzato. Se il codice tenta di usare un membro prima del completamento dell'inizializzazione, viene generata un'eccezione InvalidOperationException.

Le associazioni statiche possono fare riferimento a membri o campi statici do della classe contenitore, ma non ai membri o ai campi dell'istanza. Le associazioni statiche do diventano parte dell'inizializzatore statico per la classe , che viene garantita l'esecuzione prima dell'uso della classe.

Gli attributi vengono ignorati per do le associazioni nei tipi. Se è necessario un attributo per il codice eseguito in un'associazione do , deve essere applicato al costruttore primario.

Nel codice seguente una classe ha un'associazione statica e un'associazione non statica dodo . L'oggetto ha un costruttore con due parametri, a e be due campi privati vengono definiti nelle let associazioni per la classe . Vengono definite anche due proprietà. Tutti questi sono inclusi nell'ambito nella sezione associazioni non statiche do , come illustrato dalla riga che stampa tutti i valori.

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)

L'output è indicato di seguito.

Initializing MyType.
Initializing object 1 2 2 4 8 16

Vedi anche