Udostępnij za pośrednictwem


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 dolet 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 letdo 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 dodo powiązanie. Obiekt ma konstruktor, który ma dwa parametry, a i , a bdwa 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

Zobacz też