(教学思路 C#之类六)索引器
2008-12-29 23:33
387 查看
本节课我们来学习索引器,索引器的功能类似于属性,它也有一对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赋值起到有条件的限制。
//定义了一个学生类,其中CJ数组记录了学生的成绩
2 class Student
3 class Program
24
运行结果如下:请输入查询成绩的学生学号1-5号:4
64
请输入修改成绩的学生学号1-5号:4
请输入修改的成绩:78
修改后的学生成绩为:78
***********************************
学生的分数应在0到100之间
请按任意键继续. . .
请同学们注意代码第43行,要记住当一个类定义了索引器后,想访问数组的值,就可以把类的对象名想像成数组名,像数组通过索引赋值和取值一样,这样能更有助于同学们记住索引器的用法。下面我们来看一下用索引器封装哈希表的用法实例:
//定义了一个学生类,其中CJ数组记录了学生的成绩
2 class Student
3 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
请按任意键继续. . .
索引器的具体用法希望通过这两个实例同学们能理解好并掌握,当然索引器还有更加复杂的用法,同学们可以在日后随着学习的深入继续深化。
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赋值起到有条件的限制。
//定义了一个学生类,其中CJ数组记录了学生的成绩
2 class Student
3 class Program
24
运行结果如下:请输入查询成绩的学生学号1-5号:4
64
请输入修改成绩的学生学号1-5号:4
请输入修改的成绩:78
修改后的学生成绩为:78
***********************************
学生的分数应在0到100之间
请按任意键继续. . .
请同学们注意代码第43行,要记住当一个类定义了索引器后,想访问数组的值,就可以把类的对象名想像成数组名,像数组通过索引赋值和取值一样,这样能更有助于同学们记住索引器的用法。下面我们来看一下用索引器封装哈希表的用法实例:
//定义了一个学生类,其中CJ数组记录了学生的成绩
2 class Student
3 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
请按任意键继续. . .
索引器的具体用法希望通过这两个实例同学们能理解好并掌握,当然索引器还有更加复杂的用法,同学们可以在日后随着学习的深入继续深化。
相关文章推荐
- (教学思路 C#之类六)索引器
- (教学思路 C#之类六)索引器
- (教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)
- (教学思路 C#之类三)方法参数类型(ref、out、parmas)
- (教学思路 C#之类二)类成员:属性
- (教学思路 C#之类三)方法参数类型(ref、out、parmas)
- (教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)
- (教学思路 C#之类九)抽象类和接口
- (教学思路 C#之类八)多态性:base、new、override、virtual
- (教学思路 C#之类二)类成员:属性
- (教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)
- (教学思路 C#之类九)抽象类和接口
- (教学思路 C#之类九)抽象类和接口
- (教学思路 C#之类七)类和构造方法的继承(base关键字、Object类)
- (教学思路 C#之类四)构造方法(静态构造方法、this、方法重载)、析构方法(修改新增)
- (教学思路 C#之类八)多态性:base、new、override、virtual
- (教学思路 C#之类二)类成员:属性
- (教学思路 C#之类四)构造方法(静态构造方法、this、方法重载)、析构方法(修改新增)
- (教学思路 C#之类七)类和构造方法的继承(base关键字、Object类)
- (教学思路 C#之类八)多态性:base、new、override、virtual