最近看面试题也好,敲手头书上的例子也好,都让我看到了索引器这个概念,原来没有接触过,今天就来看看什么是C#中的索引器
索引器允许类或结构的实例就像数组一样进行索引。
索引器类似于属性,不同之处在于他们的取值函数采用参数
用在哪里
索引器经常是在主要用于封装内部集合或数组的类型中实现的。假如,假定具有一个名为TempRecord的类,此类表示在24小时内的10个不同时间记录的华氏温度。此类包含一个表示温度的Float类型的名为“temps”的数组和表示记录温度的日期的DateTime
通过在此类中实现一个索引器,客户端可以通过float temp=tr[4]而不是float temp=tr.temps[4]语法访问此类实例出对象的温度
语法结构
:声明类或结构上的索引器,要使用this关键字
//[修饰符] 数据类型 this[索引类型 index]
{
get{//获得属性的代码}
set{ //设置属性的代码}
}
Demo
/// <summary>
/// 最简单的索引器
/// </summary>
public class Person
{
//声明私有数组
private string[] hero = new string[5] { "老白","小粉" , "炸鸡哥", "空姐", "Hank" };
public int Length
{
get { return hero.Length; }
}
//声明索引
public string this[int index]
{
get
{
return hero[index];
}
set
{
hero[index] = value;
}
}
class Program
{
static void Main(string[] args)
{
Person breakingbad = new Person();
//使用索引器设置值
breakingbad[3] = "谢耳朵";
breakingbad[4] = "潘妮";
//使用索引器获得值
for (int i = 0; i < 5; i++)
{
System.Console.WriteLine("元素 #{0} = {1}", i, breakingbad[i]);
}
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
}
索引器和属性的比较
1.相同点
-
1).索引和属性都不用分配内存位置来存储。
-
2).索引和属性都是为类的其它成员提供访问控制的。
-
3).索引和属性都有get访问器和set访问器,它们可以同时声明两个访问器,也可以只声明其中一个。
2.不同点
-
1).属性通常表示单独的数据成员,而索引表示多个数据成员。
-
2).属性既可以声明为实例属性,也可以声明为静态属性,而索引不能声明为静态的。
-
3).属性有简洁的自动实现属性,而索引必须声明完整。
-
4).get访问器:属性的 get 访问器没有参数,索引器的 get 访问器具有与索引器相同的形参表。
-
5).set访问器:属性的 set 访问器包含隐式 value 参数。除了值参数外,索引器的 set 访问器还具有与索引器相同的形参表。
版权声明:本文为cd18333612683原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。