25、索引器
2021-11-04 本文已影响0人
Peuimporte
1. 简介:
索引器允许类或结构的实例就像数组一样进行索引。写法上类似属性。
2. 语法:
关键字符: this[]
class IndexTest
{
private int[] arrayInts = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };
public int this[int index]
{
get { return arrayInts[index]; }
set { arrayInts[index] = value; }
}
}
// 使用该类
class Program
{
static void Main(string[] args)
{
IndexTest test = new IndexTest();
Console.WriteLine(test[5]); // 6
Console.ReadKey();
}
}
3. 索引器概述:
-
使用索引器可以用类似于数组的方式为对象建立索引。
-
get
取值函数返回值。set
取值函数分配值。 -
this
关键字用于定义索引器。 -
value
关键字用于定义由set
索引器分配的值。 -
索引器不必根据整数值进行索引;由你决定如何定义特定的查找机制。
-
索引器可被重载。
-
索引器可以有多个形参,例如当访问二维数组时。
4. 索引器其他用法:
1> 索引器可以有多个形参,例如多维数组的用法。
public int this[int index, int index2]
{
get
{
if (index >= arrayInts.Length)
{
throw new Exception("索引超出了界线");
}
else
{
return arrayInts[index];
}
}
set { arrayInts[index] = value; }
}
// 调用:
static void Main(string[] args)
{
IndexTest test = new IndexTest();
Console.WriteLine(test[12,6]);
Console.ReadKey();
}
2> C# 并不将索引类型限制为整数。 例如,对索引器使用字符串可能是有用的。 通过搜索集合内的字符串并返回相应的值,可以实现此类索引器。
案例说明:在此例中,声明了存储星期几的类。 声明了一个 get 访问器,它接受字符串(天名称),并返回相应的整数。 例如,星期日将返回 0,星期一将返回 1,等等。
class DayCollection
{
string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };
// This method finds the day or returns -1
private int GetDay(string testDay)
{
for (int j = 0; j < days.Length; j++)
{
if (days[j] == testDay)
{
return j;
}
}
throw new System.ArgumentOutOfRangeException(testDay, "testDay must be in the form \"Sun\", \"Mon\", etc");
}
// The get accessor returns an integer for a given string
public int this[string day]
{
get
{
return (GetDay(day));
}
}
}
class Program
{
static void Main(string[] args)
{
DayCollection week = new DayCollection();
System.Console.WriteLine(week["Fri"]);
// Raises ArgumentOutOfRangeException
System.Console.WriteLine(week["Made-up Day"]);
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
// Output: 5
// Output: 5
泛型类跟索引器
//A继承自Program,并且泛型T,需要是一个引用类型,并且泛型类,需要遵守IComparable接口
class A<T> : Program where T : class, IComparable<T>
{
private T[] list;
public T this[int index]
{
get
{
return list[index];
}
set
{
list[index] = value;
}
}
}