美文网首页
C#之索引器

C#之索引器

作者: 困卡 | 来源:发表于2017-04-16 23:53 被阅读0次

什么是索引器

索引器允许类或者结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于他们的访问采用参数。

/// <summary>
    /// 最简单的索引器
    /// </summary>
    public class IDXer
    {
        private string[] name=new string[10];

        //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象
        public string this[int index]
        {
            get 
            {
                return name[index];
            }
            set
            {
                name[index] = value;
            }
        }  
    }
        
    public class Program
    {
        static void Main(string[] args)
        {
            //最简单索引器的使用           
            IDXer indexer = new IDXer();
            //“=”号右边对索引器赋值,其实就是调用其set方法
            indexer[0] = "张三";
            indexer[1] = "李四";
            //输出索引器的值,其实就是调用其get方法
            Console.WriteLine(indexer[0]);
            Console.WriteLine(indexer[1]);
            Console.ReadKey();
        }
    }

索引器与数组的区别:

索引器的索引值(Index)类型不限定为整数:
用来访问数组的索引值(Index)一定为整数,而索引器的索引值类型可以定义为其他类型。

索引器允许重载
一个类不限定为只能定义一个索引器,只要索引器的函数签名不同,就可以定义多个索引器,可以重载它的功能。

索引器不是一个变量
索引器没有直接定义数据存储的地方,而数组有。索引器具有Get和Set访问器。

索引器与属性的区别:

索引器以函数签名方式 this 来标识,而属性采用名称来标识,名称可以任意
索引器可以重载,而属性不能重载。
索引器不能用static 来进行声明,而属性可以。索引器永远属于实例成员,因此不能声明为static。

以字符串作为下标,对索引器进行存取:

    //以字符串为下标的索引器
    public class IDXer2
    {
        private Hashtable name = new Hashtable();

        //以字符串为下标的索引器
        public string this[string index]
        {
            get
            {
                return name[index].ToString();
            }
            set
            {
                name.Add(index, value);
            }
        } 
    }

    public class Program
    {
        static void Main(string[] args)
        {
            //以字符串为下标的索引器
            IDXer2 indexer2 = new IDXer2();
            indexer2["A01"] = "张三";
            indexer2["A02"] = "李四";
            Console.WriteLine(indexer2["A01"]);
            Console.WriteLine(indexer2["A02"]);
            Console.ReadKey();
        }
  }

多参数索引器及索引器的重载

    /// <summary>
    /// 成绩类
    /// </summary>
    public class Scores
    {
        /// <summary>
        /// 学生姓名
        /// </summary>
        public string StuName { get; set; }

        /// <summary>
        /// 课程ID
        /// </summary>
        public int CourseId { get; set; }

        /// <summary>
        /// 分数
        /// </summary>
        public int Score { get; set; }
       
    }

    /// <summary>
    /// 查找成绩类(索引器)
    /// </summary>
    public class FindScore
    {
        private List<Scores> listScores;

        public FindScore()
        {
            listScores = new List<Scores>();
        }

        //索引器 通过名字&课程编号查找和保存成绩
        public int this[string stuName, int courseId]
        {
            get
            {
                Scores s = listScores.Find(x => x.StuName == stuName && x.CourseId == courseId);
                if (s != null)
                {
                    return s.Score;
                }
                else
                {
                    return -1;
                }
            }
            set
            {
                listScores.Add(new Scores() { StuName = stuName, CourseId = courseId, Score = value });
            }
        }

        //索引器重载,根据名字查找所有成绩
        public List<Scores> this[string stuName]
        {
            get
            {
                List<Scores> tempList = listScores.FindAll(x => x.StuName == stuName);
                return tempList;
            }
        }
    }

   static void Main(string[] args)
   {
       //多参数索引器和索引器重载          
       FindScore fScore = new FindScore();
       fScore["张三", 1] = 98;
       fScore["张三", 2] = 100;
       fScore["张三", 3] = 95;
       fScore["李四", 1] = 96;
       //查找 张三 课程编号2 的成绩
       Console.WriteLine("李四 课程编号2 成绩为:" + fScore["李四", 1]);
       //查找所有张三的成绩
       List<Scores> listScores = fScore["张三"];
       if (listScores.Count > 0)
       {
          foreach (Scores s in listScores)
          {
             Console.WriteLine(string.Format("张三 课程编号{0} 成绩为:{1}", s.CourseId, s.Score));
          }
       }
       else
       {
           Console.WriteLine("无该学生成绩单");
       }
       Console.ReadKey();
   }

相关文章

  • C#之索引器

    什么是索引器 索引器允许类或者结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于他们的访问采用...

  • 10月23日C#学习总结

    今天学习了属性、索引器、继承 属性:C#不直接访问类的数据,通过访问器访问(get,set)。 索引器:索引器(i...

  • C#索引器

    索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数...

  • 01-- (2019-10-09)-- 来 了解一下索引器

    1.什么是索引器?   索引器是c#语言中的一种类成员,它可以让对象像数组一样被索引获取。 例如: 2.一个小De...

  • C#中abstract的用法详解

    C#中abstract的用法详解 abstract可以用来修饰类,方法,属性,索引器和时间,这里不包括字段. 使用...

  • .NET开发相关技术

    Sql Server基础知识 查询 存储过程 触发器 视图 事务 锁(多用户并发操作) 性能优化 索引 c#基础加...

  • C#(21)集合 字典 索引器

    9yue6 集合(Collection 一、集合的作用: 有两种方式可以将对象分组: 1、创建对象数组 2、创建对...

  • C#学习笔记<七> 索引器

  • 索引构建

    1 索引构建 索引构建 建立倒排索引的过程,就是索引构建 索引器 构建索引的程序或者计算机,就是索引器 索引器需要...

  • 10-23学习总结

    今天继续学习了C#第四章面向对象程序设计 1.索引器(indexer)允许class、struct的实例像数组一样...

网友评论

      本文标题:C#之索引器

      本文链接:https://www.haomeiwen.com/subject/lduiattx.html