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