更新:2007 年 11 月
索引属性允许像访问数组一样对一组项(例如字符串中的字符,或 BitArray 中的位)进行访问。索引属性(称为索引器或默认属性)与常规属性不同,因为索引属性接受参数,参数指示要访问组中的哪个元素。索引属性的实现应尽可能简单,因为索引器经常在循环中使用。下面的准则帮助确保您的类型在适当情况下包含设计良好的索引。
避免使用具有多个参数的索引属性。
如果一个索引器需要多个参数,请重新评估该属性是否确实表示对逻辑集合的访问。如果不是,则改用方法,并考虑选择以 Get 或 Set 开头的方法名。
避免为索引器设置除 System.Int32、System.Int64、System.String、System.Object、枚举或泛型类型参数之外的其他参数类型。
如果设计需要其他类型的参数,应该仔细重新评估该成员是否确实表示对逻辑集合的访问。如果不是,则改用方法,并考虑选择以 Get 或 Set 开头的方法名。
将“Item”名称用于索引属性,除非明显有更好的名称(有关示例,请参见 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)
不要在一个类型中提供一组以上的重载索引器。
一些编译器(如 C# 编译器)会强制实施此准则。
有些语言不支持多组索引器。如果使用了多组索引器,有些开发人员将无法访问这些成员。
不要使用非默认索引属性。
一些编译器(如 C# 编译器)会强制实施此准则。并不是所有编程语言都支持非默认索引属性。如果使用了非默认索引属性,有些开发人员将无法访问这些成员。
部分版权所有 2005 Microsoft Corporation。保留所有权利。
部分版权所有 Addison-Wesley Corporation。保留所有权利。
有关设计指南的更多信息,请参见 Krzysztof Cwalina 和 Brad Abrams 编著、Addison-Wesley 于 2005 年出版的“Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries”(《框架设计指南:可重用 .NET 库的约定、术语和模式》)。