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é do
let
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é let
do
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 a
b
a 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