一个类型定义一个索引器:
public class Example { //定义一个索引器 private Int32 _str; public Int32 this[Boolean b] { get { return _str; } set { _str = value; } } }
一个类型可以有多个索引器,如下:
public class Example { //定义一个索引器 private Int32 _int; public Int32 this[Boolean b] { get { return _int; } set { _int = value; } } //定义另一个索引器 private String _str = "example"; public String this[Int32 index] { get { return _str; } set { _str = value; } } }
当一个类型存在多个索引器,如果说要在不同的编程语言间进行操作时,可以为索引器指定名称,方式如下:
利用System.Runtime.CompilerServices; 中的[IndexerName("name")]特性来完成。
以上面的代码为例:
public class Example { //定义一个索引器 private Int32 _int; [IndexerName("IntIndexer")] public Int32 this[Boolean b] { get { return _int; } set { _int = value; } } //定义另一个索引器 private String _str = "example"; [IndexerName("IntIndexer")] public String this[Int32 index] { get { return _str; } set { _str = value; } } }
c#对索引器的限制会导致以下的问题:如果其它语言的开发人员在一个类型中定义了多个不同名称的含参属性,那么c#如何使用该类?答案是该类型必须选择一个含参属性作为默认的属性。这可以通过System.Reflection.DefaultMemberAttribute来实现。