博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(教学思路 C#之类六)索引器
阅读量:6237 次
发布时间:2019-06-22

本文共 3100 字,大约阅读时间需要 10 分钟。

 本节课我们来学习索引器,索引器的功能类似于属性,它也有一对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如需转载请自行联系原作者
叶子文文
你可能感兴趣的文章
代理模式
查看>>
PHP正则表达式详解(三)
查看>>
linux 内核 2.5-4.7 版本change
查看>>
java的ArrayList使用方法
查看>>
十招让Ubuntu 16.04用起来更得心应手
查看>>
awk笔记1
查看>>
Maven for Eclipse 第三章 ——创建和导入 Maven 项目
查看>>
js jquery中 的数据类型
查看>>
DenyHosts安装及配置
查看>>
表单多文件上传样式美化 && 支持选中文件后删除相关项
查看>>
利用Axis2默认口令安全漏洞可入侵WebService网站
查看>>
java-----基本数据类型包装类
查看>>
MD5 SHA-1 示例
查看>>
【WPF】退出应用时的提示弹窗
查看>>
Node.js - 断言
查看>>
缓存穿透,缓存雪崩,热点key及解决办法
查看>>
Nginx配置直接php
查看>>
android样式开发
查看>>
radio选择事件 onchange事件 onclick事件
查看>>
很清晰的解读i2c协议【转】
查看>>