C# 四十四、索引器

概念

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

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

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

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

定义

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

  【修饰符】数据类型 this[索引类型 index]

  {

  get{//获取属性的代码}

  set{//设置属性的代码}

  }

使用

对象名[索引];

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

比较

索引器与数组的区别

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

(2)索引器允许重载

(3)索引器不是一个变量

 

索引器和属性的不同点

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

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

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

 

代码示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 class1 = new Class1();

            class1[0] = "n";
            Console.WriteLine(class1[0]);

            class1["a"] = "nn";
            Console.WriteLine(class1["a"]);

            class1["b"] = "nnn";
            Console.WriteLine(class1[0]);
            Console.WriteLine(class1["a"]);
            Console.WriteLine(class1["b"]);

            Console.ReadKey();
        }
    }

    class Class1
    {
        private string nn;
        public string this[int index]
        {
            get { return nn; }
            set { nn = value; }
        }

        public string this[string index]
        {
            get { return nn; }
            set { nn = value; }
        }
    }
}

--->
n
nn
nnn
nnn
nnn
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace suoyinqi
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 p = new Class1();
            p[0] = "唐";
            p[1] = "宋";
            p[2] = "元";
            p[3] = "明";
            p[4] = "清";
            Console.WriteLine(p[0]+p[1]+p[2]+p[3]+p[4]);

            Console.ReadKey();
        }
    }
    class Class1
    {
        //数组
        string[] arr = new string[5];

        //索引器
        public string this[int index]
        {
            get { return arr[index]; }
            set { arr[index] = value; }
        }
    }
}

--->
唐宋元明清
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ssyyqq
{
    class Program
    {
        static void Main(string[] args)
        {

            chao ch = new chao();
            ch["禹"] = "夏";
            ch["汤"] = "商";
            ch["昌"] = "周";
            
            Console.WriteLine(ch["禹"]+ ch["汤"]+ ch["昌"]);
            Console.ReadKey();
        }
    }

    class chao
    {
        //字典
        Dictionary<string, string> di = new Dictionary<string, string>();

        //索引器
        public string this [string index]
        {
            get { return di[index]; }
            set { di[index] = value; }
        }

    }
}

--->
夏商周
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace mlist
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 class1 = new Class1();

            class1[0] = "aaa";
            class1["1"] = "bbb";
            class1[2] = "ccc";

            Console.WriteLine(class1[0]);
            Console.WriteLine(class1["1"]);
            Console.WriteLine(class1[2]);

            Console.ReadKey();
        }
    }

    class Class1
    {
        public List<string> list = new List<string>(3) {"aa","bb","cc" };
       
        public string this[int index]
        {
            get { return list[index]; }
            set { list[index] = value; }
        }

        public string this[string index]
        {
            get { return list[int.Parse(index)]; }
            set { list[int.Parse(index)] = value; }
        }
    }
}

--->
aaa
bbb
ccc

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值