Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az do osztálydefiníciók kötései műveleteket hajtanak végre az objektum létrehozásakor, vagy statikus do kötés esetén a típus első használatakor.
Szemantika
[static] do expression
Megjegyzések
A do kötések a kötésekkel együtt vagy után let , de az osztálydefiníciók tagdefiníciói előtt jelennek meg. Bár a do kulcsszó nem kötelező do a modul szintjén lévő kötésekhez, osztálydefiníciók kötései esetében do nem kötelező.
Minden adott típusú objektum felépítéséhez a nem statikus kötések és a nem statikus dolet kötések abban a sorrendben lesznek végrehajtva, amelyben azok megjelennek az osztálydefinícióban. Egy típusban több do kötés is előfordulhat. A nem statikus let kötések és a nem statikus do kötések az elsődleges konstruktor törzsévé válnak. A nem statikus do kötések szakaszban lévő kód hivatkozhat az elsődleges konstruktorparaméterekre, valamint a let kötések szakaszban definiált értékekre vagy függvényekre.
A nem statikus do kötések mindaddig hozzáférhetnek az osztály tagjaihoz, amíg az osztály rendelkezik egy önazonosítóval, amelyet az osztályfejléc egyik as kulcsszója határoz meg, és mindaddig, amíg a tagok összes felhasználása az osztály önazonosítójával van minősítve.
Mivel let a kötések inicializálják egy osztály privát mezőit, ami gyakran szükséges annak biztosításához, hogy a tagok a várt módon viselkedjenek, do a kötéseket általában kötések után let helyezik el, hogy a do kötésben lévő kód egy teljesen inicializált objektummal végrehajtható legyen. Ha a kód egy tagot próbál használni az inicializálás befejezése előtt, az InvalidOperationException létrejön.
A statikus do kötések hivatkozhatnak a belefoglalt osztály statikus tagjaira vagy mezőire, de nem példánytagokra vagy mezőkre. A statikus do kötések az osztály statikus inicializálójának részévé válnak, amely az osztály első használata előtt garantáltan végrehajtható.
A típusok kötéseinél do az attribútumok figyelmen kívül lesznek hagyva. Ha egy kötésben do végrehajtott kódhoz attribútum szükséges, azt az elsődleges konstruktorra kell alkalmazni.
Az alábbi kódban egy osztály statikus do kötéssel és nem statikus do kötéssel rendelkezik. Az objektum konstruktora két paraméterrel rendelkezik, a és bkét privát mező van definiálva az let osztály kötéseiben. Két tulajdonság is definiálva van. Ezek mindegyike hatókörben van a nem statikus do kötések szakaszban, ahogy azt az összes értéket kinyomó vonal is szemlélteti.
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 kimenet a következő.
Initializing MyType.
Initializing object 1 2 2 4 8 16