`
isiqi
  • 浏览: 16706051 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

索引指示器

阅读更多

本节课将介绍C#的索引指示器,其目的包括:
1.了解什么是索引指示器

2.如何实现索引指示器

3.重载索引指示器

4.了解如何实现多参数的索引指示器

索引指示器并不难使用。它们的用法跟数组相同。在一个类内部,你可以按照你的意愿来管理一组数据的集合。这些对象可以是类成员的有限集合,也可以是另外一个数组,或者是一些复杂的数据结构。不考虑类的内部实现,其数据可以通过使用索引指示器来获得。如下是一个例子:

1.清单 11-1. 索引指示器的例子:IntIndexer.cs

1usingSystem;
2/**////
3///A simple indexer example.
4///

5classIntIndexer
6{
7privatestring[] myData;
8
9publicIntIndexer(intsize)
10{
11myData =newstring[size];
12for(inti =0; i <size; i++)
13{
14myData[i] ="empty";
15}

16}

17publicstringthis[intpos]
18{
19get
20{
21returnmyData[pos];
22}

23set
24{
25myData[pos] =value;
26}

27}

28
29staticvoidMain(string[] args)
30{
31intsize =10;
32IntIndexer myInd =newIntIndexer(size);
33myInd[9] ="Some Value";
34myInd[3] ="Another Value";
35myInd[5] ="Any Value";
36Console.WriteLine(" Indexer Output ");
37for(inti =0; i <size; i++)
38{
39Console.WriteLine("myInd[{0}]: {1}", i, myInd[i]);
40}

41}

42}

说明


1.清单 11-1演示了如何实现一个索引指示器, IntIndexer类有个名为myData的字符串数组,该数组是私有成员,因而其外部成员是看不见的。该数组是在构造函数中进行初始化的,该构造函数带有一个整型size参数,用来初始化myData数组,初始化时 把单词"empty"作为每个数组元素的值。

2.IntIndexer类的下一成员是索引指示器(Indexer),由关键字this和方括号[int pos]标识出来。该成员带有一个位置参数pos。正如你已经猜测到,Indexer的实现同属性一样。Indexer有get 和set访问操作,就同属性中的用法一样。索引指示器(indexer)返回一个字符串,在定义索引指示器时,string这个类型名标志着其返回类型为字符串类型。

3.Main()方法完成如下事情:初始化一个新的IntIndexer对象,添加一些值,并且打印出结果。其输出结果如下:

Indexer Output

myInd[0]: empty
myInd[1]: empty
myInd[2]: empty
myInd[3]: Another Value
myInd[4]: empty
myInd[5]: Any Value
myInd[6]: empty
myInd[7]: empty
myInd[8]: empty
myInd[9]: Some Value


4.在不少程序语言中,通常都是使用整数作为下标来访问作为数组元素的,但C#的索引指示器不仅能够做到这一点,而且还能够更进一步。 定义索引指示器时,可以带有多个参数,每个参数的类型可以不同。添加的参数由逗号隔开,同方法中的的参数表一样。索引指示器的合法的参数类型包括:整型,枚举类型和字符串。另外,索引指示器也可以被重载。在清单 11-2中,我们修改了前面的程序,以便用来重载索引指示器 ,从而可以接受不同类型的参数。

2.清单 11-2. 重载的索引指示器: OvrIndexer.cs

1usingSystem;
2/**////
3///Implements overloaded indexers.
4///

5classOvrIndexer
6{
7privatestring[] myData;
8privateintarrSize;
9publicOvrIndexer(intsize)
10{
11arrSize =size;
12myData =newstring[size];
13for(inti =0; i <size; i++)
14{
15myData[i] ="empty";
16}

17}

18
19publicstringthis[intpos]
20{
21get
22{
23returnmyData[pos];
24}

25set
26{
27myData[pos] =value;
28}

29}

30
31publicstringthis[stringdata]
32{
33get
34{
35intcount =0;
36for(inti =0; i <arrSize; i++)
37{
38if(myData[i] ==data)
39{
40count++;
41}

42}

43returncount.ToString();
44}

45set
46{
47for(inti =0; i <arrSize; i++)
48{
49if(myData[i] ==data)
50{
51myData[i] =value;
52}

53}

54}

55}

56
57staticvoidMain(string[] args)
58{
59intsize =10;
60OvrIndexer myInd =newOvrIndexer(size);
61myInd[9] ="Some Value";
62myInd[3] ="Another Value";
63myInd[5] ="Any Value";
64myInd["empty"] ="no value";
65Console.WriteLine(" Indexer Output ");
66for(inti =0; i <size; i++)
67{
68Console.WriteLine("myInd[{0}]: {1}", i, myInd[i]);
69}

70Console.WriteLine(" Number of "no value" entries: {0}", myInd["no value"]);
71}

72}

说明

1.清单 11-2 演示了如何重载索引指示器。
带有整型参数pos的第一个索引指示器同清单11-1中的一样,但是,该程序中有个带有字符串参数的新的索引指示器。对于这个新的索引指示器来说,其get操作返回的是同参数值data相匹配的成员的个数。 Set操作把数组中同参数值匹配的元素值该变为value值。

2.在清单11-2的Main()方法中,演示了重载的索引指示器,它接受字符串参数。

该重载的索引指示器调用了set操作,通过使用下列命令: myInd["empty"] = "no value"; set操作把"no value"值赋给myInd 类中所有的值为"empty"的成员。 myInd类的每个成员都已经输出之后,就把最后一个数据输出到控制台,该数据统计数组成员值为"no value"的个数。 使用如下命令:myInd["no value"],就可调用get操作。输出结果如下:


Indexer Output
myInd[0]: no value
myInd[1]: no value
myInd[2]: no value
myInd[3]: Another Value
myInd[4]: no value
myInd[5]: Any Value
myInd[6]: no value
myInd[7]: no value
myInd[8]: no value
myInd[9]: Some Value

Number of "no value" entries: 7


3.在清单 11-2中,两个索引指示器共处在同一个类中, 这是可以的,因为它们有不同的特征。

一个索引指示器的特征是通过索引指示器参数表中的参数个数和类型表现出来的。类能够辨别出其特征,并调用相应的索引指示器。带有多个参数的索引指示器可以用如下格式来实现:

1publicobjectthis[intparam1, ..., intparamN]
2{
3get
4{
5//process and return some class data
6}

7set
8{
9//process and assign some class data
10}

11}


小结
现在你已经了解了索引指示器是用来做什么的,以及其用法。如同数组的用法一样,你可以创建索引指示器来访问类的成员。本文也提到了索引指示器的重载和多参数索引指示器。

分享到:
评论

相关推荐

    天轰穿系列教程之-26类-索引指示器

    天轰穿系列教程之-26类-索引指示器天轰穿系列教程之-26类-索引指示器天轰穿系列教程之-26类-索引指示器天轰穿系列教程之-26类-索引指示器天轰穿系列教程之-26类-索引指示器天轰穿系列教程之-26类-索引指示器天轰穿...

    VS2005入门视频教程-030.类-索引指示器.rar

    本系列教程的课程安排参考了多本.net 1.1以及在目前的2.0新书的基础上认真编订。不敢夸口本系列多了不起,但至少敢保证你看完本系列,再做完每个小结的测试,你入门是绝对没有问题的!做一个简单的网站是绝对可以的!...

    ViewPager 光标、指示器文字跟随变化

    每当页面切换时,我们可以通过ViewPager的`addOnPageChangeListener()`方法设置监听器,获取当前选中的页面索引,然后根据索引更新指示器上对应文字的颜色。例如,我们可以使用一个TextView数组,当页面改变时,将...

    自定义控件实现ViewPager指示器

    同时,我们也需要在`onPageSelected()`中获取当前选中的页面索引,以便更新选中的指示器。 4. **动态更新视图** 在获取到`ViewPager`的页面信息后,我们可以在`onCreate()`或者`onResume()`中初始化指示器视图,并...

    C#入门教程

    - 接口只能包含方法、属性、索引指示器和事件。 - **15.3 接口的成员** - 接口成员没有实现细节。 - **15.4 接口的实现** - 类可以通过实现接口来提供具体的实现。 - **15.5 抽象类与接口** - 抽象类可以包含...

    安卓A-Z字母排序索引相关-类似微信按照字母排列listview的item.rar

    5. UI布局:设计ListView的item布局,使其包含姓名文本和可选的字母索引指示器。同时,创建字母索引的UI元素,可以是悬浮按钮、侧滑菜单或者其他形式。 6. 动态更新:在用户滚动ListView时,根据当前可视区域的首...

    C Sharp完全手册.pdf

    - **定义**:索引指示器允许类像数组一样使用下标来访问元素。 - **实现**:索引指示器的具体实现细节。 - **13.3 小结** ##### 第十四章:继承 - **14.1 C#的继承机制** - **单继承**:C#中只支持单继承。 - ...

    C#完全中文手册

    - 接口中可以包含的方法、属性、索引指示器等。 - **15.4 接口的实现** - 实现接口的具体方法。 - **15.5 抽象类与接口** - 抽象类与接口的区别。 - **15.6 小结** - 总结接口的概念和技术要点。 ##### 第十六...

    jquery简洁版左右按钮切换焦点图

    5. 索引指示器:通常以小点的形式显示当前显示的图片位置,使用户了解轮播状态。 6. 兼容性和响应式设计:确保在不同设备和浏览器上都能正常工作,并适应不同屏幕尺寸。 这个jQuery焦点图的实现原理可能包括以下...

    C#从入门到精通-ppt

    本书既为入门者提供了简单教程,同时也为高级编程人员提供了大量的例程。由3部分组成: 第一部分是c#入门教程,用12章阐述了c#语言的最基本特征和主要功能,包括;C#介绍;一个简单的欢迎程序;...索引指示器。

    ArcGIS教程:使用范围指示器增强鹰眼图或定位器地图

    - 如果数据框用于数据驱动页面,指示器则会根据当前索引要素的轮廓来显示。 - 如果数据框经过裁剪,则范围指示器仅显示裁剪后的部分。 - 如果数据框既不参与数据驱动页面也没有经过裁剪,则始终使用简单范围。 #...

    自带指示器和滑动切换图片功能的relativelayout

    1. **创建自定义`RelativeLayout` 子类**:扩展`RelativeLayout` 类,并添加必要的成员变量,如`ViewPager`、指示器数组和当前选中图片的索引。 2. **初始化组件**:在`onCreate()` 或者`onFinishInflate()` 方法中...

    C#基础知识25个常见问题.doc

    这些问题涵盖了C#语言的基本概念、变量、修饰符、继承、接口、抽象类、密封类、索引指示器、反射等方面。 1.静态变量和非静态变量的区别: 静态变量使用static修饰符声明,在所属类被装载时创建,通过类进行访问。...

    ViewPagerIndicator-三角形指示器

    在这个案例中,"ViewPagerIndicator-三角形指示器"特指的是一个实现了三角形形状的指示器,它不仅支持滑动操作,还支持点击交互,增加了用户界面的友好性和功能性。 首先,我们需要了解ViewPager的基本概念和使用...

    cs代码-类的成员:常量、域和事件 函数成员:方法、属性、索引指示器、运算符、构造函数和析构函数 类:是引用类型 结构:是值类型

    6. 索引器:索引器允许类像数组一样被索引。例如,`public int this[int index] { get {...} set {...} }`。 7. 运算符重载:C#允许你自定义运算符的行为,如`public static Complex operator + (Complex a, ...

    android viewpager 左右无限循环滑动 + 小圆点指示器

    本教程将详细讲解如何实现ViewPager的左右无限循环滑动,并结合自定义小圆点指示器来增强用户体验。 首先,我们需要理解ViewPager的基本用法。ViewPager继承自PagerAdapter,其核心在于`PagerAdapter`的`...

    C#笔试题目(带答案)分享.pdf

    11. 接口成员:接口可以包含方法、属性、索引指示器、事件等成员,但不能包含常量或字段。 知识点:接口成员、方法、属性、索引指示器、事件 12. 接口实现:接口不能通过方法实现,需要通过类或结构来实现。 知识...

    轮播广告图片5张图片实现轮播

    -- 可选:导航箭头和索引指示器 --&gt; ``` 接下来,我们使用CSS来美化这个轮播。CSS可以控制图片的大小、位置、过渡效果等。以下是一个基础样式设置: ```css .carousel { position: relative; width: 100%; ...

Global site tag (gtag.js) - Google Analytics