C# 基础17 索引器

概念

索引器是一种特殊的类的成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写。

当一个类包含了数组和集合成员时,使用索引器将大大简化对数组或集合成员的存取操作。

可以通过索引器可以存取类的实例的数组成员,操作方法和数组相似。

索引器(Indexer)可被重载,索引器声明的时候也可带有多个参数,且每个参数可以是不用的类型

定义

定义索引器的方式与定义属性有些类似,形式如下:

访问修饰符 数据类型 this[数据类型 X]
   {
       get{获取属性的代码}; 
       set{设置属性的代码};
   }
public string this[int a]
   {
       get { return a; }
       set { a = value; }
   }

使用 

对象名[索引]

其中索引的数据类型必须与索引器的索引类型相同 

 比较

索引器与数组的区别

1.索引器的索引值(Index)类型不受限制 

2.索引器允许重载

3.索引器不是一个变量

索引器和属性的不同点

1.属性以名称来标识,索引器以函数形式标识

2.索引器可以被重载,属性不可以

3.索引器不能声明为static,属性可以

代码:

 字段+属性+索引器
 class Class1
    {
        private int a;               //隐藏字段a
        public int this[int b]       //公开的属性
        {
            get { return a; }
            set { a = value;}
        }
        public int this[string c]    索引器[]中数据类型不同 决定了输入时进入哪个
        {
            get { return a; }
            set { a = value; }
        }
    }
  static void Main(string[] args)
        {
            Class1 class1 = new Class1();   //创建实例
            class1[1] = 56;                 //[]中为int类型  进入上面第一个索引器中
            Console.WriteLine(class1[1]);   // 输出              56
            class1["qw"] = 13;              //[]中为string类型    进入上面第二个索引器中
            Console.WriteLine(class1["qw"]);//输出               13
            class1["zx"] = 40; 
            Console.WriteLine(class1["zx"]);  输出               40
            Console.WriteLine(class1["qw"]);  输出               40
            Console.WriteLine(class1[1]);     输出               40

            Console.ReadKey();
        }

数组+索引器
    class Class1
    {
        string[] Aa = new string[5];
        public string this[int a]
        {
            get { return Aa[a]; }      //将从外面接收的数字转化坐标
                                       //使坐标对应的字符串放入数组Aa中
            set { Aa[a] = value; }     //从外面接收字符串
        }
        public void O()                //创建方法O
        {
            foreach (var item in Aa)   //遍历输出Aa
            {
                Console.WriteLine(item);
            }
        }
    }
        static void Main(string[] args)  
        {
            Class1 class1 = new Class1();
            class1[0] = "q"; class1[1] = "w"; class1[2] = "e";
            class1[3] = "r"; class1[4] = "t";
            class1.O();
            Console.ReadKey();
        }
-----------------------------------------------输出结果
q
w
e
r
t

 

 
或以下输出
static void Main(string[] args)
  {
     Class1 class1 = new Class1();
     class1[0] = "q"; class1[1] = "w"; class1[2] = "e";
     class1[3] = "r"; class1[4] = "t";
     Console.WriteLine(class1[0]+ class1[1]+ class1[2]+ class1[3]+ class1[4]);
     Console.ReadKey();
  }
-----------------------------输出结果
qwert

重点:

字典+索引器
class Class1
  {
        //字典  Dictionary 使用键值对形式  通过键获取值<键,值>
      Dictionary<int, string> Oo = new Dictionary<int, string>();
        //索引器
      public string this[int a]
      {
          get { return Oo[a]; }
          set { Oo[a] = value; }
      }
  }
class Program
  {
      static void Main(string[] args)
      {
          Class1 P = new Class1();
          P[0] = "一只羊";
          P[1] = "两只羊";
          P[2] = "三只羊";
          P[3] = "四只羊";
          Console.WriteLine(P[0]+ P[1]+ P[2]+ P[3]);
          Console.ReadKey();
      }
  }
--------------------------------------------输出结果

一只羊两只羊三只羊四只羊

   ArrayList数组+索引器(修改List数组中的数值)
 class Class1
    {
        public List<string> list = new List<string>(3) { "qq","ww","ee"};
        public string this[int a]     
        {
            get { return list[a]; }    //将接收放入数组
            set { list[a] = value; }   //将接收放入下标
        }
        public string this[string b]
        {
            get { return list[int.Parse(b)]; }   //将接收的字符串转化成数组下标
            set { list[int.Parse(b)]=value; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Class1 class1 = new Class1();
            class1[0] = "qqqqqq";   //因为[]中属性类型是数字  进入第一个索引器
            class1["1"] = "wwwwwww";//因为[]中属性类型是字符串  进入第二个索引器
            class1[2] = "eeeeeeee";
            Console.WriteLine(class1[0]);
            Console.WriteLine(class1["1"]);
            Console.WriteLine(class1[2]);
            Console.ReadKey();
        }
    }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值