C#索引指示器浅析

开发 后端
这里介绍C#索引指示器并不难使用。它们的用法跟数组相同。在一个类内部,你可以按照你的意愿来管理一组数据的集合。

C#语言有很多值得学习的地方,这里我们主要介绍C#索引指示器,包括介绍C#索引指示器并不难使用。它们的用法跟数组相同等方面。

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

实现C#索引指示器(indexer)的类可以象数组那样使用其实例后的对象,但与数组不同的是C#索引指示器的参数类型不仅限于int。简单来说,其本质就是一个含参数属性:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.    
  5. namespace Example08  
  6. {  
  7. public class Point  
  8. {  
  9. private double x, y;  
  10. public Point(double X, double Y)  
  11. {  
  12. x = X;  
  13. y = Y;  
  14. }  
  15. //重写ToString方法方便输出  
  16. public override string ToString()  
  17. {  
  18. return String.Format("X: {0} , Y: {1}", x, y);  
  19. }  
  20. }  
  21. public class Points  
  22. {  
  23. Point[] points;  
  24. public Points(Point[] Points)  
  25. {  
  26. points = Points;  
  27. }  
  28. public int PointNumber  
  29. {  
  30. get   
  31. {   
  32. return points.Length;   
  33. }  
  34. }  
  35. //实现索引访问器  
  36. public Point this[int Index]  
  37. {  
  38. get  
  39. {  
  40. return points[Index];  
  41. }  
  42. }  
  43. }  
  44.    
  45. //感谢watson hua(http://huazhihao.cnblogs.com/)的指点  
  46. //索引指示器的实质是含参属性,参数并不只限于int  
  47. class WeatherOfWeek  
  48. {  
  49. public string this[int Index]  
  50. {  
  51. get  
  52. {  
  53. //注意case段使用return直接返回所以不需要break  
  54. switch (Index)  
  55. {  
  56. case 0:  
  57. {  
  58. return "Today is cloudy!";  
  59. }  
  60. case 5:  
  61. {  
  62. return "Today is thundershower!";  
  63. }  
  64. default:  
  65. {  
  66. return "Today is fine!";  
  67. }  
  68. }  
  69. }  
  70. }  
  71. public string this[string Day]  
  72. {  
  73. get  
  74. {  
  75. string TodayWeather = null;  
  76. //switch的标准写法  
  77. switch (Day)  
  78. {  
  79. case "Sunday":  
  80. {  
  81. TodayWeather = "Today is cloudy!";  
  82. break;  
  83. }  
  84. case "Friday":  
  85. {  
  86. TodayWeather = "Today is thundershower!";  
  87. break;  
  88. }  
  89. default:  
  90. {  
  91. TodayWeather = "Today is fine!";  
  92. break;  
  93. }  
  94. }  
  95. return TodayWeather;  
  96. }  
  97. }  
  98. }  
  99. class Program  
  100. {  
  101. static void Main(string[] args)  
  102. {  
  103. Point[] tmpPoints = new Point[10];  
  104. for (int i = 0; i < tmpPoints.Length; i++)  
  105. {  
  106. tmpPoints[i] = new Point(i, Math.Sin(i));  
  107. }  
  108. Points tmpObj = new Points(tmpPoints);  
  109. for (int i = 0; i < tmpObj.PointNumber; i++)  
  110. {  
  111. Console.WriteLine(tmpObj[i]);  
  112. }  
  113. string[] Week = new string[] 
    { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Staurday"};  
  114. WeatherOfWeek tmpWeatherOfWeek = new WeatherOfWeek();  
  115. for (int i = 0; i < 6; i++)  
  116. {  
  117. Console.WriteLine(tmpWeatherOfWeek[i]);  
  118. }  
  119. foreach (string tmpDay in Week)  
  120. {  
  121. Console.WriteLine(tmpWeatherOfWeek[tmpDay]);  
  122. }  
  123. Console.ReadLine();  
  124. }  
  125. }  

【编辑推荐】

  1. C#静态变量简单分析
  2. C# sealed修饰符学习笔记
  3. C# const和static readonly区别浅谈
  4. C#隐含类型局部变量浅析
  5. C#对象初始化器描述
责任编辑:佚名 来源: 赛迪网
相关推荐

2009-08-27 13:45:45

C#别名指示符

2009-08-07 17:25:37

C# SortedLi

2009-08-17 18:34:50

C# ChangeCo

2009-08-14 17:45:52

C# ArrayLis

2021-07-17 15:31:20

ChromeHTTPS浏览器

2009-08-10 16:40:03

C#索引器

2009-08-31 17:53:20

C#实现索引器

2009-08-25 17:59:49

C#入门

2019-02-21 10:17:45

Windows 10 剩余时间电池寿命

2009-08-25 17:21:31

C#索引

2009-09-11 12:41:41

C#类型转换

2009-09-03 17:54:04

C#开发浏览器

2009-09-03 17:49:59

C#浏览器开发

2009-08-27 13:30:11

C# interfac

2009-08-20 16:15:19

C# 匿名方法

2009-08-20 14:45:13

C# Switch语句

2009-08-27 11:43:31

C#语法

2009-08-26 13:07:07

C#交错数组

2009-08-18 09:24:52

C# Anonymou

2009-09-10 14:52:55

C# get
点赞
收藏

51CTO技术栈公众号