手头上的这个项目有一个比较少见的需求,最少,对于我来说是这样。
首先类 Record 里面有一个 公共属性 cells,然后要对这个cells索引。
原本以为建立一个索引器就可以了,但是designer说不是。怎么这样说呢?
如果在 Record中建立索引,那,访问cells是 Record【key】,然后文档不是这样要求的。
文档要求 Record.Items【key】。。。
ho,no!!
也就是要有一个属性,去访问另外一个属性。注意,这里不是方法返回属性,而是属性。
这个我可没有见过,查阅 MSDN,关于属性的和索引的,我找到了 索引属性。它是这样说的:
教程
假定您要编写一个 Document 类,该类封装非常长的文本章节。为能够方便地实现各种操作(如检查拼写),您可能希望以单词(以及字符)的虚拟数组形式查看文档。
下面的示例展示实现这种类的技术。对于每个“索引属性”,您定义一个嵌套类,该类包含对主类实例的反向引用。主类上的 readonly 字段提供对嵌套类(定义每个虚拟数组)的实例的访问。每个嵌套类定义一个索引器以及其他类似集合的方法(例如 Count 属性)。下面的示例针对“Words”和“Characters”展示这一点。
注意 请慎重使用该技术!仅在使用数组索引操作提供的抽象化能明确阐明使用您的类的代码,并且索引器同时具有“获取”(Get) 和“设置”(Set) 访问器时,才使用该模式。
msdn上还附有例子,但是一时间没有看明白。(别笑我蠢!)。于是自己试一下。
新建了一个工程,TestIndexer,里面有两个项目:TestIndexer和IndexerTest,分别用于定义和测试。
TestInderxer中只有一个类:
IndexerTest:
发现有三点很重要,一:内部类中必须有一个指向外部类的引用,否则不能使用外部类的属性。(当然,静态字段是可以的。)
二:外部类中要有 一个 类型是内部类的 属性。
三:索引写在 内部类中,并且内部类要和 外部类 改属性的访问级别相等。(估计前者大于后者应该都可以的。)