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 b
er 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