具索引的屬性允許對項目群組有類似陣列的存取權 (例如,字串中的字元或 BitArray 中的位元)。 具索引的屬性 (稱為索引子或預設屬性) 與一般屬性不同之處在於,這些屬性可接受指示要存取群組中的哪一個元素之參數。 索引屬性的實作應該盡量簡單,因為索引子經常會用於迴圈。 下列方針可協助您確保型別在適當時會包含設計完善的索引。
請考慮使用索引子,為儲存於內部陣列中的資料提供存取權。
請考慮提供型別上表示項目集合的索引子。
避免使用有一個以上參數的具索引之屬性。
如果索引子需要多個參數,請重新評估屬性是否真的表示邏輯集合的存取。 如果不是,請改用方法,並考慮選擇以 Get 或 Set 開頭的方法名稱。
避免使用參數型別不是 System.Int32、System.Int64、System.String、System.Object、列舉型別或泛型型別參數的索引子。
如果設計需要使用其他參數型別,您應該極力重新評估成員是否真的表示邏輯集合的存取。 如果不是,請改用方法,並考慮選擇以 Get 或 Set 開頭的方法名稱。
請務必使用具索引的屬性之名稱項目,除非明顯有更好的名稱 (例如,請參閱 System.String.Chars(System.Int32) 屬性)。
IndexerNameAttribute 屬性可用來自訂索引子的名稱。
請勿同時提供語意上相同的索引子和方法。
在下列程式碼範例中,索引子應該變更為方法。
<System.Runtime.CompilerServices.IndexerNameAttribute("PositionsHeld")> _
Public Property Item (skillId as Integer) as JobInfoCollection
...
Public Function GetPositions(skillId as Integer, _
minJobLevel as Integer) _
as JobInfoCollection
[System.Runtime.CompilerServices.IndexerNameAttribute("PositionsHeld")]
public JobInfoCollection this [int skillId]
...
public JobInfoCollection GetPositions(int skillId, int minJobLevel)
[System::Runtime::CompilerServices::IndexerNameAttribute("PositionsHeld")]
property JobInfoCollection^ default [int]
...
JobInfoCollection^ GetPositions(int skillId, int minJobLevel)
請勿在一個型別中提供一個以上的多載索引子系列。
類似 C# 編譯器的某些編譯器會強制實行此方針。
某些語言不支援多組索引子; 如果您使用多組索引子,某些開發人員將無法存取這些成員。
請勿使用非預設的具索引之屬性。
類似 C# 編譯器的某些編譯器會強制實行此方針。 並非所有程式設計語言都支援非預設的具索引之屬性; 如果您使用這些屬性,某些開發人員將無法存取這些成員。
Portions Copyright 2005 Microsoft Corporation. All rights reserved.
Portions Copyright Addison-Wesley Corporation. All rights reserved.
設計指引的詳細資訊,請參閱"框架設計準則:公約、 成語和可重複使用的模式。網路圖書館"書 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 衛斯理,發表。