Vazby do ve třídách

Vazba do v definici třídy provádí akce při vytvoření objektu nebo pro statickou do vazbu při prvním použití typu.

Syntaxe

[static] do expression

Poznámky

Vazba do se zobrazí společně s vazbami nebo za let vazbami, ale před definicemi členů v definici třídy. do I když je klíčové slovo volitelné pro do vazby na úrovni modulu, není volitelné pro do vazby v definici třídy.

Pro výstavbu každého objektu libovolného typu se nestatické vazby a nestatické dolet vazby provádějí v pořadí, v jakém se zobrazují v definici třídy. V jednom typu může dojít k více do vazbám. Nestatické vazby a nestatické letdo vazby se stanou tělem primárního konstruktoru. Kód v oddílu nestatických do vazeb může odkazovat na parametry primárního konstruktoru a všechny hodnoty nebo funkce, které jsou definovány v let části vazby.

Nestatické do vazby mají přístup k členům třídy, pokud má třída vlastní identifikátor, který je definován klíčovým slovem as v záhlaví třídy, a pokud jsou všechny použití těchto členů kvalifikované pomocí vlastního identifikátoru třídy.

Vzhledem k tomu let , že vazby inicializují privátní pole třídy, což je často nezbytné k zajištění chování členů podle očekávání, do vazby jsou obvykle vloženy za let vazby, aby kód v do vazbě mohl provést s plně inicializovaným objektem. Pokud se váš kód pokusí použít člen před dokončením inicializace, je vyvolána výjimka InvalidOperationException.

Statické do vazby mohou odkazovat na statické členy nebo pole nadřazené třídy, ale ne na členy instance nebo pole. Statické do vazby se stanou součástí statického inicializátoru pro třídu, což je zaručeno spuštění před prvním použití třídy.

Atributy jsou ignorovány pro do vazby v typech. Je-li atribut vyžadován pro kód, který se spouští v vazbě do , musí být použit na primární konstruktor.

V následujícím kódu má třída statickou do vazbu a nestatické do vazby. Objekt má konstruktor, který má dva parametry a aba dvě privátní pole jsou definována ve let vazbách pro třídu. Jsou definovány také dvě vlastnosti. Všechny jsou v oboru v oddílu nestatické do vazby, jak je znázorněno řádkem, který vytiskne všechny tyto hodnoty.

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)

Výstup je následující.

Initializing MyType.
Initializing object 1 2 2 4 8 16

Viz také