假设我在类中有一个数组或任何其他集合,以及一个返回它的属性,如下所示:
public class Foo
{
public IList<Bar> Bars{get;set;}
}
现在,我可以这样写吗:
public Bar Bar[int index]
{
get
{
//usual null and length check on Bars omitted for calarity
return Bars[index];
}
}
不可以——您不能在 C# 中编写命名索引器。从 C# 4 开始,您可以将它们用于 COM 对象,但不能编写它们。
然而,正如您所注意到的,foo.Bars[index]
无论如何都会按照您的意愿行事...这个答案主要是为了 future 的读者。
详细说明:公开具有索引器的某种类型的 Bars
属性可以实现您想要的,但您应该考虑如何公开它:
- 您是否希望调用者能够用不同的集合替换该集合? (如果不是,请将其设置为只读属性。)
- 您希望调用者能够修改集合吗?如果是这样,如何?只是替换项目,或添加/删除它们?你需要对此进行任何控制吗?这些问题的答案将决定您想要公开什么类型 - 可能是只读集合,或者带有额外验证的自定义集合。