Dizinlenmiş özelliklerin (F#)
Dizin özelliklerini dizisel erişim sağlayan özellikler veriler sıralanır.
// 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
Notlar
Üç tür önceki sözdizimi hem de dizinlenmiş özellikleri tanımlamak nasıl gösterir bir get ve bir set yöntemi, sahip bir get yöntemi yalnızca ya da sahip bir set yöntemi yalnızca. Her ikisi de yalnızca get ve set yalnızca gösterilen sözdizimi için gösterilen sözdizimi birleştirmek ve bir özellik hem get hem de set olan üretmek. Bu ikinci form farklı erişilebilirlik değiştiricileri ve özniteliklerini Al yerleştirin ve yöntemleri ayarlamanıza olanak sağlar.
Zaman PropertyName olan Item, derleyici özelliği bir dizine varsayılan özellik olarak davranır. A özelliği varsayılan dizine nesne örneğinde dizi benzeri sözdizimini kullanarak erişebileceğiniz bir özelliktir. Örneğin, obj bu özellik sözdizimini tanımlayan türünde bir nesne olduğundan obj.[index] özelliğine erişmek için kullanılır.
Indexed özelliği, özellik ve parantez içinde dizin adını sağlamaktır kullanılacağı erişmek için sözdizimi. Örneğin, özellik ise Ordinal, yazdığınız obj.Ordinal(index) erişmek için.
Kullandığınız formdan bağımsız olarak, her zaman curried form için kullanmanız gereken set yöntemi bir dizinlenmiş özellikte. Curried işlevleri hakkında daha fazla bilgi için bkz: İşlevler (F#).
Örnek
Aşağıdaki kod örneği, tanımını ve varsayılan ve sahip varsayılan olmayan dizinlenmiş özelliklerin kullanımını göstermektedir get ve set yöntemleri.
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 ""
Çıktı
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
Birden çok Dizin değişkenleri kullanarak dizinlenmiş özellikleri
Dizinlenmiş özelliklerin birden fazla dizin değişken olabilir. Bu durumda, özelliği kullanıldığında, değişkenleri virgüllerle ayrılır. Bu tür bir özellik kümesi yönteminde ilki anahtarları içeren bir kayıt düzeni ve ikinci ayarlanan değeri ise iki curried bağımsız olması gerekir.
Aşağıdaki kodda, birden çok Dizin değişkenleri ile sıralı özelliğinin kullanımı gösterilmiştir.
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