【发布时间】:2010-07-20 19:16:22
【问题描述】:
假设我在类中有一个数组或任何其他集合,以及一个返回它的属性,如下所示:
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];
}
}
【问题讨论】:
-
Bars属性已经支持索引,所以我对你想要完成的事情有点困惑。 -
当然@Anthony
Foo f=new Foo(); f.Bars[0];哇,我想我现在该睡觉了! -
@AnthonyPegram 你可能不想暴露
Bars。它可能是一个不应该成为Foos 公共API 一部分的实现细节。此外,这暴露的不仅仅是Bars的索引属性。Bars可能是高度有状态的,暴露它可能会导致用户违反Foo承诺的不变量。 -
虽然几天后有人问了另一个问题stackoverflow.com/questions/3344620/…,但浏览量更多,但我要关闭这个问题。
-
请参阅github.com/dotnet/csharplang/issues/471 以获取添加此功能的请求以及支持和反对它的所有参数。直到今天,开发人员都拒绝添加它,因为他们没有看到该语言有足够的好处。
标签: c# properties indexed-properties