Compartilhar via


Propriedades indexadas (F#)

Indexado propriedades são ordenadas de propriedades que fornecem acesso de array semelhante aos dados.

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

Comentários

Três formas de sintaxe anterior mostram como definir as propriedades indexadas que têm ambos um get e um set método, ter um get método somente ou se tiverem um set método somente. Também pode combinar tanto a sintaxe mostrada somente obter e a sintaxe mostrada apenas o conjunto e produzir uma propriedade que possui tanto get e set. Este último formulário permite que você coloque os modificadores de acessibilidade diferentes e os atributos get e definir métodos.

Quando o PropertyName é Item, o compilador trata a propriedade como uma propriedade padrão indexado. A padrão indexados propriedade é uma propriedade que você pode acessar usando sintaxe semelhante à matriz na instância do objeto. Por exemplo, se obj é um objeto do tipo que define essa propriedade, a sintaxe obj.[index] é usado para acessar a propriedade.

A sintaxe para acessar uma propriedade Indexado de não-padrão é fornecer o nome da propriedade e o índice entre parênteses. Por exemplo, se a propriedade for Ordinal, você escreve obj.Ordinal(index) para acessar o proprietário.

Independentemente de qual formulário usar, você deve sempre usar o formulário curried para o set método na propriedade indexado. Para obter informações sobre as funções curried, consulte Funções (F#).

Exemplo

O exemplo de código a seguir ilustra a definição e uso do padrão e propriedades indexadas de não-padrão que têm get e set métodos.

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

Saída

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

Propriedades indexadas com várias variáveis de índice

Propriedades indexadas podem ter mais de uma variável de índice. Nesse caso, as variáveis são separadas por vírgulas, quando a propriedade é usada. O método set em uma propriedade deve ter dois argumentos curried, a primeira é uma tupla que contém as chaves e o segundo do qual é o valor que está sendo definido.

O código a seguir demonstra o uso de uma propriedade indexada com várias variáveis de índice.

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

Consulte também

Conceitos

Membros (F#)