Aracılığıyla paylaş


Özellikler (F#)

Properties bir nesneyle ilişkilendirilmiş değerleri temsil eden üyeleridir.

// Property that has both get and set defined.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName
   with [accessibility-modifier] get() =
      get-function-body
   and [accessibility-modifier] set parameter =
      set-function-body

// Alternative syntax for a property that has get and set.
[ attributes-for-get ]
[ static ] member [accessibility-modifier-for-get] [self-identifier.]PropertyName =
      get-function-body
[ attributes-for-set ]
[ static ] member [accessibility-modifier-for-set] [self-identifier.]PropertyName
   with set parameter =
      set-function-body

// Property that has get only.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName =
      get-function-body

// Alternative syntax for property that has get only.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName
   with get() =
      get-function-body

// Property that has set only.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName
   with set parameter =
      set-function-body

// Automatically implemented properties.
[attributes ]
[ static ] member val [accessibility-modifier ] PropertyName = initialization-expression [ with get, set ]

Notlar

Özelliklerini temsil "olan bir" ilişki içinde nesne örnekleri ile veya türündeki statik özellikleri için ilişkili verileri temsil eden nesne tabanlı programlama.

Özellikler (yedekleme deposu olarak da bilinir) temel değer özelliği için açıkça belirtmek isteyip istemediğinizi veya derleyici otomatik olarak sizin için yedekleme deposu oluşturmak izin vermek istediğiniz bağlı olarak iki şekilde bildirebilirsiniz. Genellikle, özelliği için değer veya değişken yalnızca basit bir sarıcı olduğunda Önemsiz olmayan uygulama özelliği varsa, daha açık şekilde ve otomatik şekilde kullanmanız gerekir. Açıkça bildirmenize için member anahtar sözcüğü. Bildirime dayanan bu sözdizimini belirtir sözdizimi tarafından gelir get ve set da adlı bir yöntem erişimcileri. Oku/yaz, salt okunur ve salt yazılır özellikler çeşitli formları sözdizimi bölümünde gösterilen açık sözdizimi kullanılır. Salt okunur özellikler yalnızca tanımladığınız bir get yöntemi; yalnızca salt yazma özelliklerini tanımlayan bir set yöntemi. Her ikisi de bir özelliğe sahiptir, Not get ve set erişimcileri alternatif sözdizimi öznitelikleri ve her erişeni için aşağıdaki kodda gösterildiği gibi farklı erişilebilirlik değiştiricileri belirtmenize olanak sağlar.

// A read-only property.
member this.MyReadOnlyProperty = myInternalValue
// A write-only property.
member this.MyWriteOnlyProperty with set (value) = myInternalValue <- value
// A read-write property.
member this.MyReadWriteProperty
    with get () = myInternalValue
    and set (value) = myInternalValue <- value

Hem de okuma/yazma özellikleri için bir get ve set yöntemi, sırasını get ve set ters kaydedilebilir. Alternatif olarak gösterilen sözdizimi sağlamak get sadece ve gösterilen sözdizimi set bileşik sözdizimini kullanmak yerine yalnızca. Bunu kolaylaştırır için tek tek dışarı yorum get veya set , bir şey yapmak gerekebilir, yöntem. Bu alternatif bileşik sözdizimini kullanarak aşağıdaki kodu gösterilir.

member this.MyReadWriteProperty with get () = myInternalValue
member this.MyReadWriteProperty with set (value) = myInternalValue <- value

Özel özellikleri için veri verilir, tutulan değerler depoları yedekleme. Derleyici otomatik olarak yedekleme deposu oluşturmak için anahtar sözcükler kullanın member val, self-identifier atlayın ve özellik başlatmak için bir ifade sağlar. Özellik kesilebilir olmasını ise dahil with get, set. Örneğin, aşağıdaki sınıf türü otomatik olarak uygulanan iki özellik içerir. Property1salt okunur durumdadır ve birincil yapıcısına sağlanan bağımsız değişken başlatılır ve Property2 boş bir dize olarak başlatılan ayarlanabilir bir özellik:

type MyClass(property1 : int) =
    member val Property1 = property1
    member val Property2 = "" with get, set

Bunlar diğer üye tanımlamaları önce tıpkı dahil edilmesi için otomatik olarak uygulanan özellikleri, bir tür başlatmanın parçası let bağlar ve do tür bağlar. Not otomatik olarak uygulanan bir özellik başlatır ifade başlatma sırasında ve değil özelliği her erişildiğinde yalnızca değerlendirilir. Bu davranış açıkça uygulanan bir özelliğinin aksine davranıştır. Bunun etkili, bu özellikler başlatmak için kod anlamı sınıfının kurucusuna eklenir. Aşağıdaki kod bu farklılık gösteren göz önünde bulundurun:

type MyClass() =
    let random  = new System.Random()
    member val AutoProperty = random.Next() with get, set
    member this.ExplicitProperty = random.Next()

let class1 = new MyClass()
printfn "class1.AutoProperty = %d" class1.AutoProperty
printfn "class1.AutoProperty = %d" class1.AutoProperty
printfn "class1.ExplicitProperty = %d" class1.ExplicitProperty
printfn "class1.ExplicitProperty = %d" class1.ExplicitProperty

Çıktı

  

Önceki kodun çıktısı ExplicitProperty, her çağrıldığında değişiklikler ise AutoProperty değerini tekrar tekrar çağrıldığında değiştirilmemiş olduğunu gösterir. Açık özellik alıcı yöntemi olarak otomatik olarak uygulanan bir özellik deyimi her zaman değerlendirilmez göstermektedir.

Uyarı

Gibi özellikler de başlatılması ile otomatik olarak çalışmayan temel sınıf Kurucularını özel işlemler gerçekleştiren varlık Framework (System.Data.Entity) uygulanan bazı kitaplık vardır.Bu gibi durumlarda, açık özelliklerini kullanmayı deneyin.

Özellikler, sınıfları, yapıları, discriminated sendikalar, kayıtları, arabirimler ve türü uzantıları üyesi olabilir ve nesne ifadeleri da tanımlanabilir.

Öznitelik özellikleri için uygulanabilir. Öznitelik bir özellik uygulamak için önce özelliği ayrı bir satırda özniteliğini yazma. Daha fazla bilgi için bkz. Öznitelikler (F#).

Varsayılan olarak, ortak özellikleridir. Erişilebilirlik değiştiricileri özellikleri için de uygulanabilir. Hem de uygulamak için istediyseniz erişilebilirlik değiştiricisi uygulamak için bunu hemen özellik adından önce eklemek get ve set yöntemleri; önce Ekle get ve set her erişeni için farklı erişilebilirlik, anahtar sözcükler. The accessibility-modifier can be one of the following: public, private, internal. Daha fazla bilgi için bkz. Erişim denetimi (F#).

Özellik uygulamalarında bir özelliği her erişildiğinde yürütülür.

Statik ve örnek özellikleri

Özellikler, statik veya özellikleri örnek. Statik özellikler bir örneği çağrılan ve değil tek tek nesnelerle tipiyle ilişkili değerleri için kullanılır. Statik özellikler için self-identifier atlayın. Self-identifier örnek özellikleri için gereklidir.

Bir static alan elinizde bir senaryo şu statik özelliğin tanımını temel alan myStaticValue yani Yedekleme saklama özelliği.

static member MyStaticProperty
    with get() = myStaticValue
    and set(value) = myStaticValue <- value

Özellikler de olabilir dizi benzeri durumda adlı Özellikler dizine. Daha fazla bilgi için bkz. Dizinlenmiş özelliklerin (F#).

Tür ek özellikleri

Çoğu durumda, derleyici gerçekleştirip yedekleme deposunun türünden bir özellik türü için yeterli bilgiye sahip ancak bir tür ek ekleyerek türü açıkça ayarlayabilirsiniz.

// To apply a type annotation to a property that does not have an explicit 
// get or set, apply the type annotation directly to the property.
member this.MyProperty1 : int = myInternalValue
// If there is a get or set, apply the type annotation to the get or set method.
member this.MyProperty2 with get() : int = myInternalValue

Set erişimcileri özelliğini kullanma

Sağlayan özellikleri ayarlayabilirsiniz set kullanarak erişimcileri <- işleci.


// Assume that the constructor argument sets the initial value of the
// internal backing store.
let mutable myObject = new MyType(10)
myObject.MyProperty <- 20
printfn "%d" (myObject.MyProperty)

Çıkış 20.

Özet özellikleri

Özellikler Özet olabilir. Yöntem olarak soyut hemen özelliğiyle ilişkilendirilmiş sanal bir gönderme olduğu anlamına gelir. Yani, soyut özellikleri olmadan aynı sınıf tanımında gerçekten soyut olabilir. Böyle bir özellik içeren bu nedenle soyut bir sınıf sınıfıdır. Alternatif olarak, soyut, yalnızca sanal bir özellik olan ve bu durumda bir tanımı aynı sınıfta bulunmalıdır gelebilir. Not özet özelliklerde özel olmamalı ve soyut bir erişimci ise, diğeri de soyut olmalıdır. Soyut sınıflar hakkında daha fazla bilgi için bkz: Soyut sınıflar (F#).

// Abstract property in abstract class.
// The property is an int type that has a get and
// set method
[<AbstractClass>]
type AbstractBase() =
   abstract Property1 : int with get, set

// Implementation of the abstract property
type Derived1() =
   inherit AbstractBase()
   let mutable value = 10 
   override this.Property1 with get() = value and set(v : int) = value <- v

// A type with a "virtual" property.
 type Base1() =
   let mutable value = 10
   abstract Property1 : int with get, set
   default this.Property1 with get() = value and set(v : int) = value <- v

// A derived type that overrides the virtual property
type Derived2() =
   inherit Base1()
   let mutable value2 = 11
   override this.Property1 with get() = value2 and set(v) = value2 <- v

Ayrıca bkz.

Başvuru

Yöntemleri (F#)

Diğer Kaynaklar

Üyeler (F#)