作者:
Clark Zheng 來源:
博客園 發布時間: 2008-09-10 18:59 閱讀: 5301 次 推薦: 0
原文鏈接 [收藏]
系列文章導航:
靜態成員和非靜態成員的區別?
const 和 static readonly 區別?
extern 是什么意思?
abstract 是什么意思?
internal 修飾符起什么作用?
sealed 修飾符是干什么的?
override 和 overload 的區別?
什么是索引指示器?
new 修飾符是起什么作用?
this 關鍵字的含義?
可以使用抽象函數重寫基類中的虛函數嗎?
C#基礎概念之密封類,屬性訪問器,接口
類和結構的區別?
C#基礎概念之抽象類,接口,接口多繼承
別名指示符是什么?
如何手工釋放資源?
C#基礎概念之P/Invoke,StringBuilder 和 String
explicit 和 implicit 的含義?
params 有什么用?
什么是反射?
8.什么是索引指示器?
答:
實現索引指示器(indexer)的類可以象數組那樣使用其實例后的對象,但與數組不同的是索引指示器的參數類型不僅限于int。簡單來說,其本質就是一個含參數屬性
示例:

Code
using System;
using System.Collections.Generic;
using System.Text;
namespace Example08
{
public class Point
{
private double x, y;
public Point(double X, double Y)
{
x = X;
y = Y;
}
//重寫ToString方法方便輸出
public override string ToString()
{
return String.Format("X: {0} , Y: {1}", x, y);
}
}
public class Points
{
Point[] points;
public Points(Point[] Points)
{
points = Points;
}
public int PointNumber
{
get
{
return points.Length;
}
}
//實現索引訪問器
public Point this[int Index]
{
get
{
return points[Index];
}
}
}
//感謝watson hua(http://huazhihao.cnblogs.com/)的指點
//索引指示器的實質是含參屬性,參數并不只限于int
class WeatherOfWeek
{
public string this[int Index]
{
get
{
//注意case段使用return直接返回所以不需要break
switch (Index)
{
case 0:
{
return "Today is cloudy!";
}
case 5:
{
return "Today is thundershower!";
}
default:
{
return "Today is fine!";
}
}
}
}
public string this[string Day]
{
get
{
string TodayWeather = null;
//switch的標準寫法
switch (Day)
{
case "Sunday":
{
TodayWeather = "Today is cloudy!";
break;
}
case "Friday":
{
TodayWeather = "Today is thundershower!";
break;
}
default:
{
TodayWeather = "Today is fine!";
break;
}
}
return TodayWeather;
}
}
}
class Program
{
static void Main(string[] args)
{
Point[] tmpPoints = new Point[10];
for (int i = 0; i < tmpPoints.Length; i++)
{
tmpPoints[i] = new Point(i, Math.Sin(i));
}
Points tmpObj = new Points(tmpPoints);
for (int i = 0; i < tmpObj.PointNumber; i++)
{
Console.WriteLine(tmpObj[i]);
}
string[] Week = new string[] { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Staurday"};
WeatherOfWeek tmpWeatherOfWeek = new WeatherOfWeek();
for (int i = 0; i < 6; i++)
{
Console.WriteLine(tmpWeatherOfWeek[i]);
}
foreach (string tmpDay in Week)
{
Console.WriteLine(tmpWeatherOfWeek[tmpDay]);
}
Console.ReadLine();
}
}
}
結果:

Code
X: 0 , Y: 0
X: 1 , Y: 0.841470984807897
X: 2 , Y: 0.909297426825682
X: 3 , Y: 0.141120008059867
X: 4 , Y: -0.756802495307928
X: 5 , Y: -0.958924274663138
X: 6 , Y: -0.279415498198926
X: 7 , Y: 0.656986598718789
X: 8 , Y: 0.989358246623382
X: 9 , Y: 0.412118485241757
Today is cloudy!
Today is fine!
Today is fine!
Today is fine!
Today is fine!
Today is thundershower!
Today is cloudy!
Today is fine!
Today is fine!
Today is fine!
Today is fine!
Today is thundershower!
Today is fine!
文章列表