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 do
do
olmayan bağlaması vardır. nesnesinin iki parametresi a
olan bir oluşturucu vardır ve b
sı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