Share via


do Bindings in klassen

Een do binding in een klassedefinitie voert acties uit wanneer het object wordt samengesteld of, voor een statische do binding, wanneer het type voor het eerst wordt gebruikt.

Syntaxis

[static] do expression

Opmerkingen

Een do binding wordt samen met of na let bindingen weergegeven, maar vóór liddefinities in een klassedefinitie. Hoewel het do trefwoord optioneel is voor do bindingen op moduleniveau, is het niet optioneel voor do bindingen in een klassedefinitie.

Voor de constructie van elk object van een bepaald type worden niet-statische do bindingen en niet-statische let bindingen uitgevoerd in de volgorde waarin ze worden weergegeven in de klassedefinitie. Meerdere do bindingen kunnen in één type voorkomen. De niet-statische let bindingen en de niet-statische do bindingen worden de hoofdtekst van de primaire constructor. De code in de sectie niet-statische do bindingen kan verwijzen naar de primaire constructorparameters en eventuele waarden of functies die zijn gedefinieerd in de let sectie Bindingen.

Niet-statische do bindingen hebben toegang tot leden van de klasse zolang de klasse een zelf-id heeft die is gedefinieerd door een as trefwoord in de klassekop en zolang alle toepassingen van deze leden worden gekwalificeerd met de zelf-id voor de klasse.

Omdat let bindingen de privévelden van een klasse initialiseren, wat vaak nodig is om te garanderen dat leden zich gedragen zoals verwacht, do worden bindingen meestal na let bindingen geplaatst, zodat code in de do binding kan worden uitgevoerd met een volledig geïnitialiseerd object. Als uw code probeert een lid te gebruiken voordat de initialisatie is voltooid, wordt er een InvalidOperationException gegenereerd.

Statische do bindingen kunnen verwijzen naar statische leden of velden van de klasse insluiten, maar niet naar leden of velden. Statische do bindingen worden onderdeel van de statische initializer voor de klasse, die gegarandeerd wordt uitgevoerd voordat de klasse voor het eerst wordt gebruikt.

Kenmerken worden genegeerd voor do bindingen in typen. Als een kenmerk vereist is voor code die in een do binding wordt uitgevoerd, moet het worden toegepast op de primaire constructor.

In de volgende code heeft een klasse een statische do binding en een niet-statische do binding. Het object heeft een constructor met twee parameters a en , en ber worden twee privévelden gedefinieerd in de let bindingen voor de klasse. Er worden ook twee eigenschappen gedefinieerd. Al deze zijn binnen het bereik van de sectie niet-statische do bindingen, zoals wordt geïllustreerd door de regel waarmee al deze waarden worden afgedrukt.

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)

De uitvoer is als volgt.

Initializing MyType.
Initializing object 1 2 2 4 8 16

Zie ook