do — Powiązania w klasach
do
Powiązanie w definicji klasy wykonuje akcje, gdy obiekt jest skonstruowany lub w przypadku powiązania statycznegodo
, gdy typ jest używany po raz pierwszy.
Składnia
[static] do expression
Uwagi
do
Powiązanie jest wyświetlane razem z powiązaniami lub po let
nim, ale przed definicjami składowych w definicji klasy. do
Chociaż słowo kluczowe jest opcjonalne dla do
powiązań na poziomie modułu, nie jest opcjonalne w do
przypadku powiązań w definicji klasy.
W przypadku budowy każdego obiektu dowolnego typu powiązania niestatyczne i powiązania niestatyczne do
let
są wykonywane w kolejności, w której są wyświetlane w definicji klasy. W jednym typie może występować wiele do
powiązań. Powiązania niestatyczne i powiązania niestatyczne let
do
stają się treścią konstruktora podstawowego. Kod w sekcji powiązania niestatyczne do
może odwoływać się do podstawowych parametrów konstruktora oraz wszystkich wartości lub funkcji zdefiniowanych w let
sekcji powiązań.
Powiązania niestatyczne do
mogą uzyskiwać dostęp do składowych klasy, o ile klasa ma identyfikator własny zdefiniowany przez as
słowo kluczowe w nagłówku klasy i tak długo, jak wszystkie zastosowania tych składowych są kwalifikowane z identyfikatorem własnym klasy.
Ponieważ let
powiązania inicjują pola prywatne klasy, co jest często niezbędne do zagwarantowania, że składowe zachowują się zgodnie z oczekiwaniami, powiązania są zwykle umieszczane po let
powiązaniach, do
aby kod w powiązaniu do
mógł zostać wykonany z w pełni zainicjowanym obiektem. Jeśli kod próbuje użyć elementu członkowskiego przed ukończeniem inicjowania, zostanie zgłoszony wyjątek InvalidOperationException.
Powiązania statyczne do
mogą odwoływać się do statycznych elementów członkowskich lub pól otaczającej klasy, ale nie do elementów członkowskich ani pól wystąpień. Powiązania statyczne do
stają się częścią statycznego inicjatora klasy, który ma gwarancję wykonania przed pierwszym zastosowaniem klasy.
Atrybuty są ignorowane dla do
powiązań w typach. Jeśli atrybut jest wymagany dla kodu wykonywanego w powiązaniu do
, należy go zastosować do konstruktora podstawowego.
W poniższym kodzie klasa ma powiązanie statyczne i niestatyczne do
do
powiązanie. Obiekt ma konstruktor, który ma dwa parametry, a
i , a b
dwa pola prywatne są zdefiniowane w let
powiązaniach dla klasy. Zdefiniowano również dwie właściwości. Wszystkie te elementy znajdują się w zakresie w sekcji powiązania niestatyczne do
, jak pokazano w wierszu, który wyświetla wszystkie te wartości.
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)
Dane wyjściowe są następujące:
Initializing MyType.
Initializing object 1 2 2 4 8 16