(教学思路 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赋值起到有条件的限制。
索引器
 1  //定义了一个学生类,其中CJ数组记录了学生的成绩 
 2         class Student 
 3        { 
 4                 //数组CJ定义了五个学生的成绩。 
 5                 int[] CJ = { 81, 72, 63, 64, 95 }; 
 6                 //定义一个索引器供外部类访问CJ数组 
 7                 public  int  this[ int Xh] 
 8                { 
 9                        get 
10                        {         //返回索引值为学号-1的数组CJ的元素值,即学生的成绩 
11                                 return CJ[Xh - 1]; 
12                        } 
13                         //使用set访问器,限制不符合条件的数值不许给数组CJ赋值 
14                        set 
15                        {      //当外部给数组的元素赋值时,先判断值的条件,满足条件时,将value赋值给索引值为学号-1的成绩数组CJ的元素。 
16                                 if (value > 100 || value < 0) 
17                                        Console.WriteLine( "学生的分数应在0到100之间"); 
18                                 else 
19                                        CJ[Xh - 1] = value; 
20                        } 
21                } 
22        } 
23         class Program 
24        { 
25                 static  void Main( string[] args) 
26                { 
27                         
28                        Console.Write( "请输入查询成绩的学生学号1-5号:"); 
29                         int xh =  int.Parse(Console.ReadLine()); 
30 
31                         //创建一个student类的实例对象class1班级1. 
32                        Student class1 =  new Student(); 
33                         //使用“对象[索引值]”的方式得到student类中数组CJ的元素值。 
34                        Console.WriteLine(class1[xh]); 
35 
36                         //如果想给数组的元素赋值时,就使用到了set访问器,先对xgcj进行判断,再赋值。 
37                        Console.Write( "请输入修改成绩的学生学号1-5号:"); 
38                         int xgxh =  int.Parse(Console.ReadLine()); 
39                        Console.Write( "请输入修改的成绩:"); 
40                         int xgcj =  int.Parse(Console.ReadLine()); 
41                         
42                         //赋值也使用对象【索引值】的方式 
43                        class1 [xgxh ]=xgcj; 
44                        Console.WriteLine( "修改后的学生成绩为:"+ class1[xgxh]); 
45 
46                        Console.WriteLine( "***********************************"); 
47                     
48                         //当给数组中第4个元素不符合条件的值时,就会执行set语句中的if的语句块, 
49                         //即提示出错误提示。 
50                        class1[4] = 102; 
51                    
52                } 
53
 
运行结果如下: 请输入查询成绩的学生学号1-5号:4
64
请输入修改成绩的学生学号1-5号:4
请输入修改的成绩:78
修改后的学生成绩为:78
***********************************
学生的分数应在0到100之间
请按任意键继续. . .
          请同学们注意代码第43行,要记住当一个类定义了索引器后,想访问数组的值,就可以把类的对象名想像成数组名,像数组通过索引赋值和取值一样,这样能更有助于同学们记住索引器的用法。下面我们来看一下用索引器封装哈希表的用法实例:
索引器二
 1     //定义了一个学生类,其中CJ数组记录了学生的成绩 
 2         class Student 
 3        { 
 4                 //数组CJ定义了五个学生的成绩。 
 5                Hashtable CJ =  new Hashtable(); 
 6 
 7 
 8                 //定义一个索引器供外部类访问CJ,学生姓名为索引值 
 9                 public  string     this[ string    Name] 
10                { 
11                        get 
12                        {         //通过传入的哈希表的键,得到值。 
13                                 return CJ[Name].ToString (); 
14                        } 
15                
16                        set 
17                        {        
18                                      //给哈希表赋值的两种方式。 
19                                        CJ[Name] = value; 
20                                      // CJ.Add(Name,value ); 
21                        } 
22                } 
23        } 
24         class Program 
25        { 
26                 static  void Main( string[] args) 
27                { 
28                         
29                        Console.Write( "请输入学生的姓名:"); 
30                         string name = Console.ReadLine(); 
31                        Console.Write( "请输入此学生的成绩:"); 
32                         string cj = Console.ReadLine(); 
33 
34                         //创建一个student类的实例对象class1班级1. 
35                        Student class1 =  new Student(); 
36                        
37                         //赋值也使用对象【索引值】的方式 
38                        class1 [name]=cj; 
39 
40                        Console.WriteLine( "姓名为{0}的学生成绩为:{1}",name,class1 [name]); 
41 
42                        
43                }
 
 
运行如下: 请输入学生的姓名:咸蛋超人
请输入此学生的成绩:25
姓名为咸蛋超人的学生成绩为:25
请按任意键继续. . .
       索引器的具体用法希望通过这两个实例同学们能理解好并掌握,当然索引器还有更加复杂的用法,同学们可以在日后随着学习的深入继续深化。
本文转自叶子文文博客51CTO博客,原文链接http://blog.51cto.com/leafwf/185715如需转载请自行联系原作者

叶子文文
相关文章
|
2月前
|
安全 C# 索引
C#一分钟浅谈:属性与索引器的定义
本文深入浅出地介绍了C#编程中的属性和索引器。属性让字段更安全,通过访问器方法在读写时执行额外操作,如验证数据有效性;索引器则赋予类数组般的访问方式,支持基于索引的数据访问模式。文章通过示例代码展示了如何定义及使用这两种特性,并提供了常见问题及其解决方案,帮助读者写出更健壮、易维护的代码。希望读者能从中学习到如何有效利用属性和索引器增强C#类的功能性。
84 12
|
C# 索引
C#编程-99:索引器实例QQ状态
C#编程-99:索引器实例QQ状态
C#编程-99:索引器实例QQ状态
|
C# 索引
C#编程-98:索引器在接口中的使用
C#编程-98:索引器在接口中的使用
115 0
C#编程-98:索引器在接口中的使用
|
C# 索引
C#编程-97:索引器在类中的使用
C#编程-97:索引器在类中的使用
106 0
C#编程-97:索引器在类中的使用
|
C# 索引
C#编程-96:索引器的使用
C#编程-96:索引器的使用
102 0
C#编程-96:索引器的使用
|
存储 C# 索引
C#索引器的实现、索引器和属性的异同对比,这些技能你get到了嘛?
C#索引器的实现、索引器和属性的异同对比,这些技能你get到了嘛?
429 0
C#索引器的实现、索引器和属性的异同对比,这些技能你get到了嘛?
|
C# 索引
C#编程-71:dataGridView获取行列坐标索引和值
C#编程-71:dataGridView获取行列坐标索引和值
392 0
|
C# 索引
重拾C#教程:高级部分-索引器(Indexer)
重拾C#教程:高级部分-索引器(Indexer)http://www.bieryun.com/3315.html 索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。
1373 0
|
C# 索引
重拾C#教程:高级部分-索引器(Indexer)
重拾C#教程:高级部分-索引器(Indexer) 索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。
1075 0