感觉还是附上代码好一点,所以就直接在代码中写注释了!
using System;
//indexer 索引器的意义:一个对象可以像数组一样被索引,
namespace _021_索引器的理解
{
class Program
{
public class indexerName//做一个索引器的类
{
public static int size = 6;//如果确定不是要经常改动,可以用const,如果可以在类里改动则可以加static
private string[] array1 = new string[size];//就是一般的数组的创建格式,注意这里私有的,说明不能在类外面直接调用
//下面是类的构造函数,通过一个循环可以对数组进行初始化
public indexerName()
{
for (int i = 0; i < size; i++)
{
array1[i] = "null";
}
}
//下面这里是重点
public string this[int index]//这就是个索引器,和c++的数组定义类似,这里的this也是指针,指向本类,这里面必须有至少一个访问器
{
get
{
if(index>=0&&index<size)
{
return array1[index];
}
else
{
string temp = " ";
return temp;
}
}
set
{
if (index >= 0 && index < size)
{
array1[index] = value;//从外赋值
}
}
}
}//以上就把索引器搭建好了。
//主函数应用索引器
static void Main(string[] args)
{
// Console.WriteLine("Hello World!");
indexerName indexerName = new indexerName();
indexerName[0] = "a";//这里就体现了索引器的作用,明明看起来是类的实例,为什么可以直接写成数组的名称?
indexerName[1] = "b";//因为其实这里本质上你可以理解为调用函数,你可以试试将索引器的类的第二个函数的访问级别改为private,这样就会报错,说明其实这里是在调用函数
indexerName[2] = "c";//注意不能用'a',因为是字符串类型,这是char类型,无法从char转到级别高的string
//为什么调用的函数,但是看起来像是直接用的实例呢?
//因为我们在写索引器函数时用的是this指针代替的数组名,所以看起来像实例
for (int i = 0; i <indexerName.size ; i++)//如果索引器类里面的size是const类型,则size为常量
{
Console.WriteLine(indexerName[i]);
}
}
}
}
浙公网安备 33010602011771号