(教学思路 C#之类六)索引器

简介:
+关注继续查看
 本节课我们来学习索引器,索引器的功能类似于属性,它也有一对get和set访问器,只不过属性是用来封装字段的,而索引器是利用访问器来有条件的来控制类中的数组类成员如数组和集合,get和set访问器的用法与属性一致,这里不做过多的讲解,首先我们定义一个int类型的数组a,观察一下索引器的具体语法:
   int [] a={1,2,3};//类中的数组也应该定义为私有变量,对外只提供索引器进行对数组的访问
 public int  this[int index]   //注意在定义索引器时要与所封装的数组类型一致。
        {
            get
            {
                return a[index];//通过get访问器,在外部类通过索引器访问数组时,直接给出index值,再通过index值作为数值的索引值得到数组的元素值
            }
            //使用set访问器,可以限制不符合条件的数值不许给数组a赋值
            set
            {
                a[index]=value;
            }
        }
      其中,index作为访问int型数组的索引值,索引值的数值类型可以是整型,也可以为string类型,这主要是取决于索引器所封装的对象的类型,当封装的对象是哈希表时,索引值index的数据类型就可以是string型,即将索引当成是哈希表的键。this关键字用于定义索引器,value关键字代表由set索引器获得的值。在使用索引器时采用“类的对象[索引值]”的方式进行对数组的访问,下面我们来看一个简单的实例,在本例中定义了一个student类,类中有一个存放五名学生成绩的数组CJ,同时定义了一个索引器目的是封装数组CJ,同时在第三方类中使用索引器的set访问器对给数组CJ赋值起到有条件的限制。
索引器
InBlock.gif 1 //定义了一个学生类,其中CJ数组记录了学生的成绩 
InBlock.gif 2        class Student 
InBlock.gif 3        { 
InBlock.gif 4                //数组CJ定义了五个学生的成绩。 
InBlock.gif 5                int[] CJ = { 81, 72, 63, 64, 95 }; 
InBlock.gif 6                //定义一个索引器供外部类访问CJ数组 
InBlock.gif 7                public int this[int Xh] 
InBlock.gif 8                { 
InBlock.gif 9                        get 
InBlock.gif10                        {        //返回索引值为学号-1的数组CJ的元素值,即学生的成绩 
InBlock.gif11                                return CJ[Xh - 1]; 
InBlock.gif12                        } 
InBlock.gif13                        //使用set访问器,限制不符合条件的数值不许给数组CJ赋值 
InBlock.gif14                        set 
InBlock.gif15                        {     //当外部给数组的元素赋值时,先判断值的条件,满足条件时,将value赋值给索引值为学号-1的成绩数组CJ的元素。 
InBlock.gif16                                if (value > 100 || value < 0) 
InBlock.gif17                                        Console.WriteLine("学生的分数应在0到100之间"); 
InBlock.gif18                                else 
InBlock.gif19                                        CJ[Xh - 1] = value; 
InBlock.gif20                        } 
InBlock.gif21                } 
InBlock.gif22        } 
InBlock.gif23        class Program 
InBlock.gif24        { 
InBlock.gif25                static void Main(string[] args) 
InBlock.gif26                { 
InBlock.gif27                         
InBlock.gif28                        Console.Write("请输入查询成绩的学生学号1-5号:"); 
InBlock.gif29                        int xh = int.Parse(Console.ReadLine()); 
InBlock.gif30 
InBlock.gif31                        //创建一个student类的实例对象class1班级1. 
InBlock.gif32                        Student class1 = new Student(); 
InBlock.gif33                        //使用“对象[索引值]”的方式得到student类中数组CJ的元素值。 
InBlock.gif34                        Console.WriteLine(class1[xh]); 
InBlock.gif35 
InBlock.gif36                        //如果想给数组的元素赋值时,就使用到了set访问器,先对xgcj进行判断,再赋值。 
InBlock.gif37                        Console.Write("请输入修改成绩的学生学号1-5号:"); 
InBlock.gif38                        int xgxh = int.Parse(Console.ReadLine()); 
InBlock.gif39                        Console.Write("请输入修改的成绩:"); 
InBlock.gif40                        int xgcj = int.Parse(Console.ReadLine()); 
InBlock.gif41                         
InBlock.gif42                        //赋值也使用对象【索引值】的方式 
InBlock.gif43                        class1 [xgxh ]=xgcj; 
InBlock.gif44                        Console.WriteLine("修改后的学生成绩为:"+ class1[xgxh]); 
InBlock.gif45 
InBlock.gif46                        Console.WriteLine("***********************************"); 
InBlock.gif47                     
InBlock.gif48                        //当给数组中第4个元素不符合条件的值时,就会执行set语句中的if的语句块, 
InBlock.gif49                        //即提示出错误提示。 
InBlock.gif50                        class1[4] = 102; 
InBlock.gif51                    
InBlock.gif52                } 
InBlock.gif53
 
运行结果如下:请输入查询成绩的学生学号1-5号:4
64
请输入修改成绩的学生学号1-5号:4
请输入修改的成绩:78
修改后的学生成绩为:78
***********************************
学生的分数应在0到100之间
请按任意键继续. . .
          请同学们注意代码第43行,要记住当一个类定义了索引器后,想访问数组的值,就可以把类的对象名想像成数组名,像数组通过索引赋值和取值一样,这样能更有助于同学们记住索引器的用法。下面我们来看一下用索引器封装哈希表的用法实例:
索引器二
InBlock.gif 1    //定义了一个学生类,其中CJ数组记录了学生的成绩 
InBlock.gif 2        class Student 
InBlock.gif 3        { 
InBlock.gif 4                //数组CJ定义了五个学生的成绩。 
InBlock.gif 5                Hashtable CJ = new Hashtable(); 
InBlock.gif 6 
InBlock.gif 7 
InBlock.gif 8                //定义一个索引器供外部类访问CJ,学生姓名为索引值 
InBlock.gif 9                public string    this[string    Name] 
InBlock.gif10                { 
InBlock.gif11                        get 
InBlock.gif12                        {        //通过传入的哈希表的键,得到值。 
InBlock.gif13                                return CJ[Name].ToString (); 
InBlock.gif14                        } 
InBlock.gif15                
InBlock.gif16                        set 
InBlock.gif17                        {        
InBlock.gif18                                     //给哈希表赋值的两种方式。 
InBlock.gif19                                        CJ[Name] = value; 
InBlock.gif20                                     // CJ.Add(Name,value ); 
InBlock.gif21                        } 
InBlock.gif22                } 
InBlock.gif23        } 
InBlock.gif24        class Program 
InBlock.gif25        { 
InBlock.gif26                static void Main(string[] args) 
InBlock.gif27                { 
InBlock.gif28                         
InBlock.gif29                        Console.Write("请输入学生的姓名:"); 
InBlock.gif30                        string name = Console.ReadLine(); 
InBlock.gif31                        Console.Write("请输入此学生的成绩:"); 
InBlock.gif32                        string cj = Console.ReadLine(); 
InBlock.gif33 
InBlock.gif34                        //创建一个student类的实例对象class1班级1. 
InBlock.gif35                        Student class1 = new Student(); 
InBlock.gif36                        
InBlock.gif37                        //赋值也使用对象【索引值】的方式 
InBlock.gif38                        class1 [name]=cj; 
InBlock.gif39 
InBlock.gif40                        Console.WriteLine("姓名为{0}的学生成绩为:{1}",name,class1 [name]); 
InBlock.gif41 
InBlock.gif42                        
InBlock.gif43                }
 
 
运行如下:请输入学生的姓名:咸蛋超人
请输入此学生的成绩:25
姓名为咸蛋超人的学生成绩为:25
请按任意键继续. . .
       索引器的具体用法希望通过这两个实例同学们能理解好并掌握,当然索引器还有更加复杂的用法,同学们可以在日后随着学习的深入继续深化。
本文转自叶子文文博客51CTO博客,原文链接http://blog.51cto.com/leafwf/185715如需转载请自行联系原作者

叶子文文
相关文章
|
2月前
|
机器学习/深度学习 存储 人工智能
基础编程题目集 函数题部分(下)
基础编程题目集 函数题部分(下)
59 0
|
2月前
|
存储 人工智能 Serverless
基础编程题目集 函数题部分(上)
基础编程题目集 函数题部分
33 0
蓝桥杯-经典枚举案例
必须要一个数组来存放0-9每个卡片的余额,每个数组下标对应各自卡片【下标为0代表卡片0的数量】
|
6月前
|
前端开发
前端学习案例10-数组遍历方法2
前端学习案例10-数组遍历方法2
26 0
前端学习案例10-数组遍历方法2
|
6月前
|
前端开发
前端学习案例15-数组遍历方法5-some和every
前端学习案例15-数组遍历方法5-some和every
28 0
前端学习案例15-数组遍历方法5-some和every
|
7月前
课外拓展2.实现qsort函数及模拟实现qsort函数
课外拓展2.实现qsort函数及模拟实现qsort函数
29 0
|
9月前
|
存储 人工智能 编译器
0基础C语言保姆教学——第五节 数组
在C99之前,这种写法是不允许的,而在C99之后,这种写法是允许的。而我们vs编译器的编译环境并不能很好的支持C99的语法,如果我们在gcc编译器或者其他对新语法更加支持的编译器下,这种写法是可以的。
86 0
0基础C语言保姆教学——第五节 数组
|
JavaScript 前端开发
【重温基础】18.相等性判断
【重温基础】18.相等性判断
136 0
|
JavaScript 前端开发 网络架构
【重温基础】10.数组
【重温基础】10.数组
103 0
|
编译器 C++
【C++初阶学习】C++类和对象-最终之章(下)(1)
【C++初阶学习】C++类和对象-最终之章(下)(1)
【C++初阶学习】C++类和对象-最终之章(下)(1)