索引器允許類和結構的實例按照與數組相同的方式進行索引,索引器類似與屬性,不同之處在於他們的訪問器采用參數。被稱為有參屬性。
簡單的索引器實例:
class Program
{
static void Main(string[] args)
{
IndexClass a = new IndexClass();
a[0] = "陳三";
a[1] = "戴四";
a[2] = "笠五";
Console.WriteLine("a[0]=" + a[0]);
Console.WriteLine("a[1]=" + a[1]);
Console.WriteLine("a[2]=" + a[2]);
Console.ReadKey();
}
}
class IndexClass
{
private string[] name = new string[10];
public string this[int index]
{
get { return name[index]; }
set { this.name[index] = value; }
}
}
索引器與數組的比較:
索引器的索引值不受類型限制。用來訪問數組的索引值一定是整數,而索引器可以是其他類型的索引值。
索引器允許重載,一個類可以有多個索引器。
索引器不是一個變量沒有直接對應的數據存儲地方。索引器有get和set訪問器。
索引器允許類和結構的實例按照與數組相同的方式進行索引,索引器類似與屬性,不同之處在於他們的訪問器采用參數。被稱為有參屬性。
簡單的索引器實例:
索引器與屬性的比較:
標示方式:屬性以名稱來標識,索引器以函數簽名來標識。
索引器可以被重載。屬性則不可以被重載。
屬性可以為靜態的,索引器屬於實例成員,不能被聲明為static
多參數索引器實例:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace Study
{
class Program
{
static void Main(string[] args)
{
ScoreIndex s = new ScoreIndex();
s["張三", 1] = 90;
s["張三", 2] = 100;
s["張三", 3] = 80;
s["李四", 1] = 60;
s["李四", 2] = 70;
s["李四", 3] = 50;
Console.WriteLine("張三課程編號為1的成績為:" + s["張三",1]);
Console.WriteLine("張三的所有成績為:");
ArrayList temp;
temp = s["張三"];
foreach (IndexClass b in temp)
{
Console.WriteLine("姓名:" + b.Name + "課程編號:" + b.CourseID + "分數:" + b.Score);
}
Console.ReadKey();
}
}
class IndexClass
{
private string _name;
private int _courseid;
private int _score;
public IndexClass(string _name, int _courseid, int _score)
{
this._name = _name;
this._courseid = _courseid;
this._score = _score;
}
public string Name
{
get { return _name; }
set { this._name = value; }
}
public int CourseID
{
get { return _courseid; }
set { this._courseid = value; }
}
public int Score
{
get { return _score; }
set { this._score = value; }
}
}
class ScoreIndex
{
private ArrayList arr;
public ScoreIndex()
{
arr = new ArrayList();
}
public int this[string _name, int _courseid]
{
get
{
foreach (IndexClass a in arr)
{
if (a.Name == _name && a.CourseID == _courseid)
{
&