Indexované vlastnosti (F#)

Indexovat vlastnosti vlastnosti, které poskytují podobné matice přístup k uspořádání dat.

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

Poznámky

Tři formy syntaxe předchozí ukazují, jak definovat indexovaných vlastností, které mají oba get a set metoda, mají get pouze metodu nebo mají set pouze metodu.Můžete kombinovat obě pouze get a syntaxi zobrazen pouze nastavení jazyka a vytvořit vlastnost, která má get a set.Tento formulář posledně umožňuje Modifikátory dostupnosti různých a atributy do get a set metody.

Když PropertyName je Item, kompilátor zpracovává vlastnost jako vlastnost Výchozí indexované.A Výchozí indexované vlastnosti je vlastnost, kterou lze získat přístup pomocí syntaxe pole jako na instanci objektu.Například pokud obj je objekt typu, který definuje tato vlastnost syntaxe obj.[index] se používá k přístupu k vlastnosti.

Syntaxe pro přístup k nevýchozí indexovaných vlastností je poskytnout název vlastnosti a indexu v závorkách.Například pokud je vlastnost Ordinal, psaní obj.Ordinal(index) k němu získat přístup.

Bez ohledu na to, který formulář použijete, je třeba použít formulář curried set metodu na indexovaná vlastnost.Informace o funkcích, curried Funkce (F#).

Příklad

Následující příklad kódu ukazuje definici a použití výchozí a jiné výchozí indexované vlastnosti, které jsou get a set metod.

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

Výsledek

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

Indexované vlastnosti s více proměnných Index

Indexovaných vlastností může mít více než jednu proměnnou indexu.Při použití vlastnosti jsou v takovém případě proměnné oddělené čárkami.Metoda set takové vlastnosti musí mít dva argumenty curried, z nichž první je n-tice obsahující klíče a druhé je nastavena hodnota.

Následující kód znázorňuje použití indexovaných vlastností s více proměnných indexu.

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

Viz také

Další zdroje

Členy (F#)