Indizierte Eigenschaften (F#)
Indizierte Eigenschaften sind Eigenschaften, die arrayähnlichen Zugriff auf geordnete Daten bieten.
// 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
Hinweise
Die drei Formen der vorherigen Syntax zeigen, wie indizierte Eigenschaften definiert werden, die sowohl über die get-Methode als auch die set-Methode, nur über die get-Methode oder nur über die set-Methode verfügen.Sie können auch die Syntax für die ausschließliche Verwendung der get-Methode und die Syntax für die ausschließliche Verwendung der set-Methode kombinieren und eine Eigenschaft erzeugen, die sowohl über get als auch über set verfügt.Diese Form ermöglicht es Ihnen, für die get-Methode und die set-Methode unterschiedliche Zugriffsmodifizierer und -attribute festzulegen.
Wenn der PropertyNameItem lautet, behandelt der Compiler die Eigenschaft als indizierte Standardeigenschaft.Eine indizierte Standardeigenschaft ist eine Eigenschaft, auf die Sie mit arrayähnlicher Syntax für die Objektinstanz zugreifen können.Wenn beispielsweise obj ein Objekt des Typs ist, der die Eigenschaft definiert, wird für den Zugriff auf die Eigenschaft die Syntax obj.[index] verwendet.
In der Syntax für den Zugriff auf eine indizierte nicht standardmäßige Eigenschaft werden der Name der Eigenschaft und der Index in Klammern angegeben.Wenn die Eigenschaft beispielsweise Ordinal lautet, schreiben Sie obj.Ordinal(index), um auf sie zuzugreifen.
Unabhängig von der verwendeten Form sollten Sie für eine indizierte Eigenschaft immer die Curry-Form der set-Methode verwenden.Informationen über Curry-Funktionen finden Sie unter Funktionen (F#).
Beispiel
Im folgenden Codebeispiel werden die Definition und Verwendung von indizierten Standardeigenschaften und indizierten nicht standardmäßigen Eigenschaften veranschaulicht, die über die get-Methode und die set-Methode verfügen.
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 ""
Output
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
Indizierte Eigenschaften mit mehreren Indexvariablen
Indizierte Eigenschaften können über mehrere Indexvariablen verfügen.In diesem Fall werden die Variablen durch Kommas getrennt, wenn die Eigenschaft verwendet wird.Die set-Methode in einer solchen Eigenschaft muss über zwei Curry-Argumente verfügen. Dabei ist das erste Argument ein Tupel, das die Schlüssel enthält, und das zweite Argument ist der Wert, der festgelegt wird.
Im folgenden Code wird die Verwendung einer indizierten Eigenschaft mit mehreren Indexvariablen veranschaulicht.
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