Açık Alanlar: val Anahtar Sözcüğü (F#)
val Anahtar sözcüğünü başlatılıyor olmadan bir alana bir sınıf veya yapı türü bildirmek için kullanılır.Bu şekilde bildirilen alanları verilir açık alanların.Başka bir kullanımı, val anahtar sözcüktür ile birlikte member otomatik olarak uygulanan bir özellik bildirmek için anahtar sözcük.Otomatik uygulanan özellikler hakkında daha fazla bilgi için bkz: Özellikler (F#).
val [ mutable ] [ access-modifier ] field-name : type-name
Notlar
Bir sınıf veya yapı türü alanları tanımlamak için her zamanki gibi kullanmaktır bir let bağlama.Ancak, let bağları her zaman mümkün, gerekli veya uygun olmayan sınıf yapıcısı bir parçası olarak başlatılmış olmalıdır.Kullanabileceğiniz val başlatılmamış bir alan isterseniz anahtar sözcüğü.
Açık alanlar, statik veya statik olmayan olabilir.The access-modifier can be public, private, or internal.Varsayılan olarak, açık ortak alanlardır.Bu farklılık gösteren let her zaman özel sınıflar bağlar.
DefaultValue birincil bir oluşturucuya sahip sınıf türleri açık alanları özniteliği gerekli.Bu öznitelik alanı sıfır olarak atandığını belirtir.Alan türü sıfır başlatma desteklemesi gerekir.Aşağıdakilerden biri ise sıfır başlatma türü destekler:
Sıfır değerine sahipse ilkel türüdür.
Normal değer olarak, olağan dışı bir değer olarak veya bir değer gösterimi olarak boş bir değer destekleyen bir türü.Buna dahildir sınıfları, dizilerini, kayıtlar, İşlevler, arabirimleri, .net baþvuru türleri unit türü ve birleþim türleri discriminated.
.net değer türü.
Tüm alanları varsayılan sıfır değeri destekleyen bir yapı.
Uyarı |
---|
Not .net Framework ad System.ComponentModel aynı ada sahip bir öznitelik içerir.Bu öznitelik hakkında daha fazla bilgi için bkz: DefaultValueAttribute. |
Aşağıdaki kod kullanımına açık alanlar ve karşılaştırılması, gösterir bir let birincil Oluşturucu sahip bir sınıf içinde bağlama.Dikkat let-ilişkili alan myInt1 özeldir.Zaman let-ilişkili alan myInt1 kendini tanımlayıcı bir üye yöntemi başvurulan this gerekli değildir.Ancak ne zaman başvurduğunuz açık alanların myInt2 ve myString, kendini tanımlayıcı gereklidir.
type MyType() =
let mutable myInt1 = 10
[<DefaultValue>] val mutable myInt2 : int
[<DefaultValue>] val mutable myString : string
member this.SetValsAndPrint( i: int, str: string) =
myInt1 <- i
this.myInt2 <- i + 1
this.myString <- str
printfn "%d %d %s" myInt1 (this.myInt2) (this.myString)
let myObject = new MyType()
myObject.SetValsAndPrint(11, "abc")
// The following line is not allowed because let bindings are private.
// myObject.myInt1 <- 20
myObject.myInt2 <- 30
myObject.myString <- "def"
printfn "%d %s" (myObject.myInt2) (myObject.myString)
Çıktı aşağıdaki gibidir:
11 12 abc
30 def
Aşağıdaki kod, birincil bir oluşturucuya sahip değil bir sınıfın içinde açık alanların kullanımını göstermektedir.Bu durumda, DefaultValue özniteliği gerekli değildir, ancak tüm alanları türü için tanımlanmış olan oluşturucular başlatılması gerekir.
type MyClass =
val a : int
val b : int
// The following version of the constructor is an error
// because b is not initialized.
// new (a0, b0) = { a = a0; }
// The following version is acceptable because all fields are initialized.
new(a0, b0) = { a = a0; b = b0; }
let myClassObj = new MyClass(35, 22)
printfn "%d %d" (myClassObj.a) (myClassObj.b)
Çıkış 35 22.
Aşağıdaki kod, bir yapı açık alanların kullanımını göstermektedir.Bir yapı bir değer türü olduğundan, otomatik olarak kendi alanlarının değerlerini sıfır olarak ayarlar ve varsayılan bir kurucusu vardır.Bu nedenle, DefaultValue özniteliği gerekli değil.
type MyStruct =
struct
val mutable myInt : int
val mutable myString : string
end
let mutable myStructObj = new MyStruct()
myStructObj.myInt <- 11
myStructObj.myString <- "xyz"
printfn "%d %s" (myStructObj.myInt) (myStructObj.myString)
Çıkış 11 xyz.
Açık alanlar için gelişigüzel kullanılması amaçlanmamıştır.Genel olarak, mümkün olduğunda kullanmanız gereken bir let bir sınıf açık bir alan yerine bağlama.Açık alanları birlikte çalışabilirlik belirli senaryolarda yararlıdır, içinde kullanılan yapısını tanımlamak gerektiğinde gibi bir platform çağırma doğal API veya com birlikte çalışabilirlik senaryolarını çağrı.Daha fazla bilgi için bkz. Dış İşlevler (F#).Hangi sınıflar birincil kurucusu olmadan çıkardığı bir F# kod üreticisi ile çalışırken, içinde açık bir alanda gerekli olabilir başka bir durumdur.Açık alanları iş parçacığı statik değişkenler veya benzer yapılar için de yararlıdır.Daha fazla bilgi için bkz. ThreadStaticAttribute.
Anahtar sözcükler member val görünen birlikte bir tür tanımı otomatik olarak uygulanan bir özelliğin tanımı değil.Daha fazla bilgi için bkz. Özellikler (F#).
Ayrıca bkz.
Başvuru
Sınıflardaki let Bağlamaları (F#)