让对象可以通过索引访问其中的元素 像数组一样
语法
访问修饰符 返回值 this [ 参数类型 参数名, 参数类型 参数名... ]
{
内部写法像属性
get{}
set{}
}
索引器可以重载
结构体中也可以有索引器
比较适用于 在类中有数组变量时使用 可以方便的访问和进行逻辑处理
练习
using System.Runtime.Serialization;
using System.Security.Cryptography;
using System.Text.Json.Serialization;
class IntArry
{
private int[] arry;
private int length;
private int capacity;
public IntArry()
{
length = 0;
capacity = 5;
arry = new int[capacity];
}
public int this[int index]
{
get
{
// if (length < 1)
// {
// arry = new int[capacity];
// length = 1;
// }
// else
if (index >= length)
{
Console.WriteLine("超出查找范围,返回最后一个值");
return arry[length- 1];
}
else if (index < 0)
{
Console.WriteLine("超出查找范围,不能为负,返回最后第一个值");
return arry[0];
}
return arry[index]; //这里可以改进
}
set
{
if (length < 1)
{
length = 1;
arry[length-1] = value;
}
else if(!(index>length -1)&&index>0)
{
arry[index] = value;
}
else
{
Console.WriteLine("添加失败");
}
}
}
public int Lenth
{
get { return length; }
}
public void AddArry(int value)
{
if (length < 1)
{
arry = new int[capacity];
length = 1;
}
if (length == capacity)
{
int[] a = new int[capacity*2];
for (int i = 0; i <length; i++)
{
a[i] = arry[i];
}
arry = a;
arry[length - 1] = value;
length++;
}
else
{
length++;
arry[length - 1] = value;
}
}
public void DelArry(int index)
{
if (index >length-1)
{
Console.WriteLine("超出范围请重新输入");
return;
}
else
{
for(int i = index;i < length-1;i++)
{
arry[index] = arry[index+1];
}
length--;
}
}
}
class Program
{
static void Main()
{
IntArry arry = new IntArry();
arry[0]= 1;
arry.AddArry(2);
arry.AddArry(3);
arry.AddArry(4);
arry.DelArry(2);
for (int i = 0; i < arry.Lenth; i++)
{
Console.WriteLine(arry[i]);
}
}
}