Aracılığıyla paylaş


Dizinlenmiş özelliklerin (F#)

Dizin özelliklerini dizisel erişim sağlayan özellikler veriler sıralanır.

// Indexed property that has both get and set defined.
member self-identifier.PropertyName
   with get(index-variable) =
      get-function-body
  and set index-variables value-variables =
      set-function-body

// Indexed property that has get only.
member self-identifier.PropertyName(index-variable) =
      get-function-body

// Alternative syntax for indexed property with get only
member self-identifier.PropertyName
   with get(index-variables) =
      get-function-body

// Indexed property that has set only.
member self-identifier.PropertyName
   with set index-variables value-variables = 
      set-function-body

Notlar

Üç tür önceki sözdizimi hem de dizinlenmiş özellikleri tanımlamak nasıl gösterir bir get ve bir set yöntemi, sahip bir get yöntemi yalnızca ya da sahip bir set yöntemi yalnızca. Her ikisi de yalnızca get ve set yalnızca gösterilen sözdizimi için gösterilen sözdizimi birleştirmek ve bir özellik hem get hem de set olan üretmek. Bu ikinci form farklı erişilebilirlik değiştiricileri ve özniteliklerini Al yerleştirin ve yöntemleri ayarlamanıza olanak sağlar.

Zaman PropertyName olan Item, derleyici özelliği bir dizine varsayılan özellik olarak davranır. A özelliği varsayılan dizine nesne örneğinde dizi benzeri sözdizimini kullanarak erişebileceğiniz bir özelliktir. Örneğin, obj bu özellik sözdizimini tanımlayan türünde bir nesne olduğundan obj.[index] özelliğine erişmek için kullanılır.

Indexed özelliği, özellik ve parantez içinde dizin adını sağlamaktır kullanılacağı erişmek için sözdizimi. Örneğin, özellik ise Ordinal, yazdığınız obj.Ordinal(index) erişmek için.

Kullandığınız formdan bağımsız olarak, her zaman curried form için kullanmanız gereken set yöntemi bir dizinlenmiş özellikte. Curried işlevleri hakkında daha fazla bilgi için bkz: İşlevler (F#).

Örnek

Aşağıdaki kod örneği, tanımını ve varsayılan ve sahip varsayılan olmayan dizinlenmiş özelliklerin kullanımını göstermektedir get ve set yöntemleri.

type NumberStrings() =
   let mutable ordinals = [| "one"; "two"; "three"; "four"; "five";
                             "six"; "seven"; "eight"; "nine"; "ten" |]
   let mutable cardinals = [| "first"; "second"; "third"; "fourth";
                              "fifth"; "sixth"; "seventh"; "eighth";
                              "ninth"; "tenth" |]
   member this.Item
      with get(index) = ordinals.[index]
      and set index value = ordinals.[index] <- value
   member this.Ordinal
      with get(index) = ordinals.[index]
      and set index value = ordinals.[index] <- value
   member this.Cardinal
      with get(index) = cardinals.[index]
      and set index value = cardinals.[index] <- value

let nstrs = new NumberStrings()
nstrs.[0] <- "ONE"
for i in 0 .. 9 do
  printf "%s " (nstrs.[i])
printfn ""

nstrs.Cardinal(5) <- "6th"

for i in 0 .. 9 do
  printf "%s " (nstrs.Ordinal(i))
  printf "%s " (nstrs.Cardinal(i))
printfn ""

Çıktı

ONE two three four five six seven eight nine ten
ONE first two second three third four fourth five fifth six 6th
seven seventh eight eighth nine ninth ten tenth

Birden çok Dizin değişkenleri kullanarak dizinlenmiş özellikleri

Dizinlenmiş özelliklerin birden fazla dizin değişken olabilir. Bu durumda, özelliği kullanıldığında, değişkenleri virgüllerle ayrılır. Bu tür bir özellik kümesi yönteminde ilki anahtarları içeren bir kayıt düzeni ve ikinci ayarlanan değeri ise iki curried bağımsız olması gerekir.

Aşağıdaki kodda, birden çok Dizin değişkenleri ile sıralı özelliğinin kullanımı gösterilmiştir.

open System.Collections.Generic

type SparseMatrix() =
    let mutable table = new Dictionary<(int * int), float>()
    member this.Item
        with get(key1, key2) = table.[(key1, key2)]
        and set (key1, key2) value = table.[(key1, key2)] <- value

let matrix1 = new SparseMatrix()
for i in 1..1000 do
    matrix1.[i, i] <- float i * float i

Ayrıca bkz.

Diğer Kaynaklar

Üyeler (F#)