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