C#中索引器,在一个类中有很多的同一类型成员的时候,比较适用索引器。
环境:我们假设有一个动物园,里边有很多动物。
用法:
1.先定义一个类,这是成员的类型。在这里就是要定义一个Animal类;
public class Animal
{
public string Name { get; set; }
}
2.再定义一个包含索引器的类,在这里是Zoo动物园类。
public class Zoo
{
private List<Animal> animals = new List<Animal>();
public Animal this[int index]
{
get{return animals[index];}
set{animals.Add(value);}
}
}
3.那么我们在主程序里就可以这么用:
class Program
{
static void Main(string[] args)
{
Animal a = new Animal();
a.Name = "老虎";
Animal b = new Animal();
b.Name = "大象";
Zoo z=new Zoo();
z[0] = a;
z[1] = b;
Console.WriteLine(z[0].Name);
Animal c;
c = z[1];
Console.WriteLine(c.Name);
}
}
好了,接下来,我们来自定义一个我们自己的表格:
1.先定义Cell单元格类
class Cell
{
public string Text { get; set; }
}
2.定义Row行 类(注意在这里我们必须就得用List<Cell>了。因为它包含很多Cell成员了,下边的Table也是,包含很多row)
class Row
{
private List<Cell> cells = new List<Cell>();
public Cell this[int index]
{
get { return cells[index]; }
set { cells.Add(value); }
}
}
3.再定义Table 表格类
class Table
{
private List<Row> rows = new List<Row>();
public Row this[int index]
{
get { return rows[index]; }
set { rows.Add(value); }
}
}
4.最后我们在主程序里可以用了:
class Program
{
static void Main(string[] args)
{
Cell c0= new Cell();
c0.Text = "姓名";
Cell c1 = new Cell();
c1.Text = "性别";
Cell c2=new Cell();
c2.Text="张三";
Cell c3=new Cell();
c3.Text="男";
Row row = new Row();
row[0] = c0;
row[1] = c1;
Row row2 = new Row();
row2[0] = c2;
row2[1] = c3;
Table table = new Table();
table[0] = row;
table[1] = row2;
//取得表格第0行,第1列的单元格内容
//Console.WriteLine(table[0][1].Text);
//取得表格第1行,第0列的单元格内容
//Console.WriteLine(table[1][0].Text);
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
Console.Write(table[i][j].Text+" ");
}
Console.WriteLine();
}
输出结果:
姓名 性别
张三 男
最后补充:
我们用table[i,j]的时候感觉怪怪地,是不是table[i,j]更人性化一点呢?
于是,我们在Table类里加了一个有两个参数的索引器:
//定义一个二维索引器
public Cell this[int rowIndex, int cellIndex]
{
get{return table[rowIndex][cellIndex];}
set { table[rowIndex][cellIndex] = value; }
}
然后我们不是论是取值还是设值都欧列!
Console.WriteLine(table[0,1].Text);
table[0, 1].Text = "女";
Console.WriteLine(table[0,1].Text);
输出:
男
女
还是自己做的表格好,想让他变男的就男的,想让他变女的就变女的!
二十一世纪的程序员想让电脑里的人物变男的就变男的,想让他变女的就变女的;还可以随时实例一个新对象出来,电脑里的!
二十二世纪的程序员想让现实中的类人机器人变男仆就变男仆,需要他变女仆就变女仆;还可以随时实例一个新对象出来,现实机器人!
广大的程序员同仁们,我们早生了100年啊!~