abstract class Bird
{
protected string name; public abstract string Name
{
get;
set;
}
public abstract string GetName();
} class Eagle : Bird
{ public Eagle(string name)
{
this.name = name;
}
public override string Name
{
get
{
return name;//throw new NotImplementedException();
}
set
{
name = value;//throw new NotImplementedException();
}
} public override string GetName()
{
//Console.WriteLine(Name);//throw new NotImplementedException();
return Name;
}
public Eagle[] _eagle = new Eagle[]; public Eagle this[int index]
{
get { return _eagle[index]; }
set
{
_eagle[index] = value;
}
}
}
客户端调用代码:
class Program
{
static void Main(string[] args)
{ Eagle eagle = new Eagle("我是一只老鹰呀!");
Console.WriteLine(eagle.GetName());
//eagle._eagle[0] = new Eagle("wo shi yi zhi xiao xiao niao");
//Console.WriteLine(eagle._eagle[0].GetName());
eagle[] = new Eagle("wo bu gu dan!");
eagle[] = new Eagle("wo shi yi zhi xiao xiao niao");
Console.WriteLine(eagle[].GetName()+"\n"+eagle[].GetName());
Console.Read();
}
}
汗,先前对索引器的用法弄错了,直接是在客户端实例化类对象后调用类的Eagle型实体变量_eagle[0]并进一步进行实例化存储在数组里,不是基于索引器的调用,查了下msdn的帮助稍作修改,现在把索引器的相关用法写下来:
1.索引器允许您按照与数组相同的方式对类、结构或接口进行索引,要声明类或结构上的索引器,请使用 this 关键字。
2.索引器类型及其参数类型必须至少如同索引器本身一样是可访问的。
3.索引器的签名由其形参的数量和类型组成。它不包括索引器类型或形参名。如果在同一类中声明一个以上的索引器,则它们必须具有不同的签名。
4.索引器值不属于变量;因此,不能将索引器值作为 ref 或 out 参数进行传递。
5.C# 并不将索引类型限制为整数。例如,对索引器使用字符串可能是有用的。通过搜索集合内的字符串并返回相应的值,可以实现此类的索引器。由于访问器可被重载,字符串和整数版本可以共存。