.NET 指南:索引属性的设计

索引属性允许以数组的方式来访问子项的分组(例如,字符串中的字符或 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 JobInfoCollection this [int skillId]

...

    public JobInfoCollection GetPositions(int skillId, int minJobLevel)
在类型中提供多个被重载的索引器。

在一些编译器(如 C# 编译器)中就是强制了这个指导方针的。

多个索引器在有些编程语言中是不被支持的。如果你使用它们,那么一些开发者将无法访问到这些成员。

不要使用非默认的索引属性。

在一些编译器(如 C# 编译器)中就是强制了这个指导方针的。非默认的索引属性在所有编程语言中都是不被支持的。如果你使用它们,那么一些开发者将无法访问到这些成员。

你可能感兴趣的:(.net)