Właściwości indeksowane (F#)

Indeksowane właściwości są właściwości, które zapewniają dostęp do tablicy podobne do uporządkowane dane.

// 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

Uwagi

Trzy formy składni poprzedniego pokazują, jak do definiowania właściwości indeksowanych, które mają zarówno get i set metodę, mają get tylko metody lub mieć set tylko metody.Można również połączyć oba składni, dotyczy tylko funkcji get i składni pokazano tylko zestawu i produkują właściwość, która ma zarówno get i set.Ten formularz ostatnie pozwala na umieszczenie modyfikatorów różnych ułatwień dostępu i atrybuty na get i ustawienie metody.

Gdy PropertyName jest Item, kompilator traktuje właściwość jako właściwość domyślną indeksowane.A domyślne indeksowane właściwość jest właściwość, która może uzyskać dostęp przy użyciu składni podobne tablicy na wystąpienie obiektu.Na przykład jeśli obj jest obiektem typu, który określa właściwość ta składnia obj.[index] jest używany do dostępu do właściwości.

Składnia do uzyskiwania dostępu do właściwości niestandardowe indeksowane jest zapewnienie nazwy właściwości i indeks w nawiasach.Na przykład, jeśli właściwość jest Ordinal, można napisać obj.Ordinal(index) do niego dostęp.

Niezależnie od użytego formularza, należy zawsze używać formularz curried set metody, właściwości indeksowanych.Aby uzyskać informacje na temat funkcji curried, zobacz Funkcje (F#).

Przykład

Poniższy przykład kodu ilustruje definicji i korzystania ze domyślnych i innych niż domyślne właściwości indeksowanych, które mają get i set metody.

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 ""

Dane wyjściowe

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

Właściwości indeksowanych wiele zmiennych indeksu

Właściwości indeksowanych można mieć więcej niż jednej zmiennej indeksu.W takim przypadku zmienne są oddzielone przecinkami, gdy jest używana.Metoda set w takiej nieruchomości musi mieć dwa argumenty curried, z których pierwsze jest krotka, zawierające klucze i drugi z nich jest wartość jest ustawiana.

Poniższy kod demonstruje użycie właściwości indeksowane, wiele zmiennych indeksu.

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

Zobacz też

Inne zasoby

Członkowie (F#)