Sınıflardaki do Bağlamaları

Bir do sınıf tanımındaki bağlama, nesne oluşturulduğunda veya statik do bağlama için tür ilk kullanıldığında eylemler gerçekleştirir.

Sözdizimi

[static] do expression

Açıklamalar

Bağlama do , bağlamalarla birlikte veya sonrasında let ancak bir sınıf tanımındaki üye tanımlarından önce görünür. Anahtar sözcüğü modül düzeyindeki bağlamalar için do isteğe bağlı olsa do da, sınıf tanımındaki bağlamalar için do isteğe bağlı değildir.

Herhangi bir türdeki her nesnenin oluşturulması için, statik do olmayan bağlamalar ve statik let olmayan bağlamalar, sınıf tanımında göründükleri sırayla yürütülür. Tek bir türde birden çok do bağlama oluşabilir. Statik let olmayan bağlamalar ve statik do olmayan bağlamalar birincil oluşturucunun gövdesi haline gelir. Statik do olmayan bağlamalar bölümündeki kod, birincil oluşturucu parametrelerine ve bağlamalar bölümünde tanımlanan tüm değerlere veya işlevlere let başvurabilir.

Statik do olmayan bağlamalar, sınıfın sınıf başlığındaki bir anahtar sözcük tarafından tanımlanan bir as kendi tanımlayıcısı olduğu sürece ve bu üyelerin tüm kullanımları sınıfın kendi tanımlayıcısıyla nitelenmiş olduğu sürece sınıfın üyelerine erişebilir.

let Bağlamalar genellikle üyelerin beklendiği gibi davranacağını garanti etmek için gerekli olan sınıfın özel alanlarını başlatdığından bağlamalar do genellikle bağlamaların ardına let getirilir, böylece bağlamadaki do kod tam olarak başlatılan bir nesneyle yürütülebilir. Kodunuz başlatma tamamlanmadan önce bir üye kullanmayı denerse InvalidOperationException oluşturulur.

Statik do bağlamalar, kapsayan sınıfın statik üyelerine veya alanlarına başvurabilir, ancak örnek üyelerine veya alanlarına başvuramayabilir. Statik do bağlamalar, sınıfın ilk kez kullanılmadan önce yürütülmesi garanti edilen statik başlatıcının bir parçası haline gelir.

Türlerdeki bağlamalar için do öznitelikler yoksayılır. Bağlamada do yürütülen kod için bir öznitelik gerekiyorsa, birincil oluşturucuya uygulanmalıdır.

Aşağıdaki kodda, bir sınıfın statik bağlaması ve statik dodo olmayan bağlaması vardır. nesnesinin iki parametresi a olan bir oluşturucu vardır ve bsınıfı için let bağlamalarda iki özel alan tanımlanır. İki özellik de tanımlanır. Bunların tümü, tüm bu değerleri yazdıran satırda gösterildiği gibi statik do olmayan bağlamalar bölümünde yer alır.

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)

Çıktı aşağıdaki gibidir:

Initializing MyType.
Initializing object 1 2 2 4 8 16

Ayrıca bkz.