索引器
为了方便将类、结构或接口当做数组来使用。
索引器用于封装内部集合或数组
定义语法
[访问修饰符] 返回类型 this[索引类型 索引名]
{
//get或set方法体
}
索引本质就是属性
利用索引可以用key得到项,亦可用项得到序号
集合具有很强的通用性(方法名应该记住)
增加
Add、AddRange
移除
Remove、RemoveAt
清空
Clear
排序
Sort、Reverse
查找
IndexOf、LastIndexOf
判存
Contains
集合的总数
Count属性
浅复制
Clone
索引
集合也可以通过“下标”来访问,叫做索引
namespace Indexer
{
class Program
{
static void Main(string[] args)
{
MyCollection mc = new MyCollection();
int[] nums = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 添加的功能
mc.Add(100);
mc.AddRange(nums);
// 插入,在3位置上添加一个100
mc.Insert(3, 100);
// 移除
//mc.Remove(100);
mc.RemoveAt(2);
// 清空
//mc.Clear();
// 读取位置为3的数据
Console.WriteLine(mc[2]);
Console.ReadKey();
}
}
// 咱们手动写一个集合
class MyCollection
{
//int[] nums;
ArrayList al;
// 用来测试的方法
private void Test()
{
this.Clear();
// this在类的内部,表示当前实例
//this[3];
}
//索引
//索引的本质是属性;属性的本质是方法。
public object this[int index]
{
get { return al[index]; }
set { al[index] = value; }
}
public MyCollection()
{
al = new ArrayList();
}
// Add方法
// 最不好的办法
#region 不好的方法
//public int Add(int num)
//{
// if (nums == null)
// {
// nums = new int[] { num };
// }
// else
// {
// int[] temp = new int[nums.Length + 1];
// for (int i = 0; i < nums.Length; i++)
// {
// temp[i] = nums[i];
// }
// temp[temp.Length - 1] = num;
// nums = temp;
// }
// return nums.Length + 1;
//}
#endregion
public int Add(object o)
{
return al.Add(0);
}
public void AddRange(ICollection ic)
{
al.AddRange(ic);
}
public void Remove(object o)
{
al.Remove(o);
}
public void RemoveAt(int index)
{
al.RemoveAt(index);
}
public void Clear()
{
al.Clear();
}
public void Insert(int index, object o)
{
al.Insert(index, o);
}
}
}