C#中的索引器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的索引器相关的知识,希望对你有一定的参考价值。


无法通过方法来知道索引器的长度,只能设定一个固定的长度,所以索引器的作用只能是初始化一个长度有限的数组,也可以用string来当键
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. man mm = new man();
  6. mm[0] = "jingya";
  7. mm[1] = "dongbao";
  8. mm[2] = "xiaolizi";
  9. mm[3] = "xializi";
  10. for (int i = 0; i < 10 ; i++)
  11. {
  12. Console.WriteLine(mm[i]);
  13. }
  14. Console.ReadKey();
  15. }
  16. }
  17. class man
  18. {
  19. public man()
  20. {
  21. for (int i = 0; i < 10; i++)
  22. {
  23. manlist[i] = "N.A.";
  24. }
  25. }
  26. private string[] manlist = new string[10]; // 其实外面的索引器就是在这里给定义好大小的,这就是这个方法的局限性
  27. public string this[int index]
  28. {
  29. set { manlist[index] = value; }
  30. get { return manlist[index]; }
  31. }
  32. }
自定义类加上[]默认就已经实现了索引器
  1. // System.Windows.Forms.Control
  2. Control[] arrCtrl = new Control[5];
  3. arrCtrl[0] = new Button();
  4. arrCtrl[3] = new Label();
可以看到,在移除老元素时会进行大量的元素移动操作。这里的ArrayList采用的元素类型是object,所以最后将空出的元素置为null。

 事实上,内存空间一旦分配是没有办法更改大小的。ArrayList其实使用“搬家”的方法来实现这个功能的,即当房子住不下这么多人的时候,那么换一个更大的新房子就行了。这里,ArrayList需要扩容时,会在内存空间中开辟一块新区域,容量为原来的2倍,并把所有元素都复制到新内存空间中。

   最基础的表现形式-顺序表,但是其存在一定缺点:必须占用一整块事先分配好的存储空间,在插入和删除操作上需要移动大量元素(即操作不方便),于是不受固定存储空间限制并且可以进行比较快捷地插入和删除操作的链表横空出世,所以我们就来复习一下链表

使用this关键字给类加上索引器

没有下面的这种用法,array没有add方法,这种是错误的,一般只用int和string类

  1. a[] s =new a[10];
  2. s.add()
int和string的类的内部已经封装好了,所以这种类的array实例可以直接使用[]来赋值
  1. int[] aa = new int[10];
  2. aa[0] = 0;







以上是关于C#中的索引器的主要内容,如果未能解决你的问题,请参考以下文章

C#语言进阶——3.C# 的索引器

c#里面的索引器注意

活动结果片段索引超出范围:0x20001

描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

《C#零基础入门之百识百例》(四十六)类的索引 -- 数组索引器

C# 索引器,实现IEnumerable接口的GetEnumerator()方法