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

As três formas de sintaxe anterior mostram como definir propriedades indexadas que têm ambos um get e um set método, tem um get método somente ou se tiverem um set método só.Você também pode combinar essas tendências a sintaxe mostrada para somente obter e a sintaxe mostrada apenas o conjunto de e produzir uma propriedade que possui tanto get e set.Este último formulário permite que você coloque 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 do array 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 acessá-lo.

Independentemente do formulário utilizado, você deve sempre usar o formulário curried para o set método em uma propriedade indexada.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 não-padrão Propriedades indexadas que tenham 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 nessa propriedade deve ter dois argumentos curried, a primeira delas é uma tupla que contém as chaves e o segundo dos quais é 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

Outros recursos

Membros (F#)