Is named indexer property possible?
假设我在类中有一个数组或任何其他与此相关的集合,并且有一个返回它的属性,如下所示:
1 2 3 4 | public class Foo { public IList<Bar> Bars{get;set;} } |
现在,我可以写这样的东西吗?
1 2 3 4 5 6 7 8 | public Bar Bar[int index] { get { //usual null and length check on Bars omitted for calarity return Bars[index]; } } |
号
不-不能用C语言编写命名索引器。从C 4开始,您可以将它们用于COM对象,但不能编写它们。
然而,正如你所注意到的,无论怎样,
详细说明:公开具有索引器的某个类型的
- 是否希望呼叫者能够用其他集合替换集合?(如果不是,则将其设置为只读属性。)
- 是否希望呼叫者能够修改集合?如果是,如何?只是更换项目,还是添加/删除项目?你需要控制吗?这些问题的答案将决定要公开的类型-可能是只读集合,也可能是带有额外验证的自定义集合。
您可以使用显式实现的接口,如下所示:C中的命名索引属性(见回复中的第二种方式)
但是,您可以滚动自己的"命名索引器"。见
- 为什么C不实现索引属性?
- 在C中轻松创建支持索引的属性#
取决于你真正想要的是什么,它可能已经为你做了。如果您试图在bars集合上使用索引器,则已经为您完成了:
1 2 |
或者如果您试图获得以下功能:
1 2 |
号
然后:
1 2 3 4 | public Bar this[int index] { get { return Bars[index]; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class NamedIndexProp { private MainClass _Owner; public NamedIndexProp(MainClass Owner) { _Owner = Owner; public DataType this[IndexType ndx] { get { return _Owner.Getter(ndx); } set { _Owner.Setter(ndx, value); } } } public MainClass { private NamedIndexProp _PropName; public MainClass() { _PropName = new NamedIndexProp(this); } public NamedIndexProp PropName { get { return _PropName; } } internal DataType getter(IndexType ndx) { return ... } internal void Setter(IndexType ndx, DataType value) { ... = value; } } |
。