索引器-Indexer(MSDN)

原创 2004年11月03日 23:52:00
索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同的是它们的访问器采用参数。

(为类或结构的实例建立索引)
索引器使您得以按照与数组相同的方式为类或结构实例建立索引。若要声明索引器,请使用以下方式:


indexer-declarator 采用下列形式之一:

formal-index-parameter 采用的形式为:


其中:

attributes(可选)
附加的声明性信息。有关属性和属性类的更多信息,请参见 C# 属性
modifiers(可选)
可以使用的修饰符为 newvirtualsealedoverrideabstractextern 以及四个访问修饰符的有效组合。有关详细信息,请参见访问修饰符
indexer-declarator
包括由索引器引入的元素 type(即 this)以及 formal-index-parameter-list。如果索引器为显式接口成员实现,则包括 interface-type
type
类型名称。
interface-type
接口名称。
formal-index-parameter-list
指定索引器的参数。参数包括可选的 attributes、索引 type 和索引 identifier。必须至少指定一个参数。不允许参数修饰符 outref
accessor-declarations
索引器访问器,它们指定与读写索引器元素有关的可执行语句。
identifier
参数名。

get 访问器

索引器的 get 访问器体与方法体类似。它返回索引器的类型。get 访问器使用与索引器相同的 formal-index-parameter-list。例如:

set 访问器

索引器的 set 访问器体与方法体类似。除了 value 隐式参数外,它还使用与索引器相同的 formal-index-parameter-list。例如:

备注

索引器的类型和 formal-index-parameter-list 中引用的每个类型必须至少与索引器本身一样是可访问的。有关可访问级别的更多信息,请参见访问修饰符

索引器的签名由其形参的数量和类型组成。它不包括索引器类型或形参名。

如果在同一类中声明一个以上的索引器,则它们必须具有不同的签名。

索引器值不作为变量来分类;因此,不可能将索引器值作为 refout 参数来传递。

若要为索引器提供可由其他语言用于默认索引属性的名称,可在声明中使用 name 属性。例如:


此索引器将具有名称 MyItem。如果不提供 name 属性,则默认名称为 Item

示例

以下示例说明如何声明私有数组字段、myArray 和索引器。通过使用索引器可直接访问实例 b[i]。另一种使用索引器的方法是将数组声明为 public 成员并直接访问它的成员 myArray[i]


输出


注意,当计算索引器的访问时(例如,在 Console.Write 语句中),调用 get 访问器。因此,如果 get 访问器不存在,将发生编译时错误。

当索引器声明包含 extern 修饰符时,称该索引器为外部索引器。因为外部索引器声明不提供任何实际的实现,所以它的每个访问器声明都由一个分号组成。

下面的示例声明了一个 BitArray 类,该类实现了一个索引器,用于访问位数组中的单个位。


BitArray 类的实例所占的内存远少于相应的 bool[](这是由于前者的每个值只占一位,而后者的每个值要占一个字节),而且,它可以执行与 bool[] 相同的操作。

下面的 CountPrimes 类使用 BitArray 和经典的“筛选”算法计算 1 和给定的最大数之间质数的数目:


请注意,访问 BitArray 的元素的语法与访问 bool[] 的元素的语法完全相同。

下列示例显示一个具有带两个参数的索引器的 26 乘 10 网格类。第一个参数必须是 A–Z 范围内的大写或小写字母,而第二个参数必须是 0–9 范围内的整数。


索引器indexer

一、索引器的基本概述         索引器定义类似于属性,但其功能与属性并不相同,可以看成是属性的增强版,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写。   1、索引器...
  • shan9liang
  • shan9liang
  • 2011年09月22日 08:48
  • 1348

索引器(Indexer)

来源:> Code: using System; namespace CsDev { class Class1 { string a; st...
  • u013384702
  • u013384702
  • 2014年02月25日 09:11
  • 462

.net程序员的盲点(四):索引器Indexers

 索引器IndexersC#引入了一个索引器(Indexers)的功能,它能让我们像处理数组一样处理对象。在C#社区中,我们又把它叫做“智能数组(smart arrays)”。定义C#索引器就像定义属...
  • edisundong
  • edisundong
  • 2007年08月13日 10:10
  • 5245

INDEXER索引器例子

在此例中,声明了存储星期几的类。声明了一个 get 访问器,它接受字符串(天名称),并返回相应的整数。例如,星期日将返回 0,星期一将返回 1,等等。代码 // Using a string as a...
  • gentlelhn
  • gentlelhn
  • 2008年02月21日 14:26
  • 161

C#索引器(Indexer)

C# 索引器(Indexer) 索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可...
  • qq_36821136
  • qq_36821136
  • 2017年08月10日 11:36
  • 42

索引器indexer学习

public class Photo //这个类是一个相片类
  • jasonvip_c
  • jasonvip_c
  • 2010年07月12日 13:29
  • 275

C# 索引器(Indexer)

大纲: 1.语法 2.Indexer的重载 3.基于接口的Indexer和代码强壮性 1.语法部分 ( Syntax ) 索引器(Indexer) 允许一个对象可以像数组一...
  • U_9_5
  • U_9_5
  • 2016年04月26日 21:10
  • 547

C#梳理【索引器Indexer】

C# 索引器(Indexer) 索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可...
  • qiaoquan3
  • qiaoquan3
  • 2017年09月28日 11:02
  • 85

【C#】索引器(Indexer)

C# 索引器(Indexer) 索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可以使用...
  • MR_XuZhe
  • MR_XuZhe
  • 2017年11月17日 08:54
  • 232

the Indexer(索引器) in C#

所谓索引器(the Indexer)其实就是一种属性(Property)(具体来说是一种含参属性) (详见.NET框架 程序设计 p220) 也可以将它看作是对操作符 [ ] 的重载。 ...
  • manmadewind
  • manmadewind
  • 2011年08月13日 18:21
  • 345
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:索引器-Indexer(MSDN)
举报原因:
原因补充:

(最多只允许输入30个字)