c#索引器的简单用法

    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[10];

        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[0] = new Eagle("wo bu gu dan!");
            eagle[1] = new Eagle("wo shi yi zhi xiao xiao niao");
            Console.WriteLine(eagle[0].GetName()+"
"+eagle[1].GetName());
            Console.Read();
        }
    }


汗,先前对索引器的用法弄错了,直接是在客户端实例化类对象后调用类的Eagle型实体变量_eagle[0]并进一步进行实例化存储在数组里,不是基于索引器的调用,查了下msdn的帮助稍作修改,现在把索引器的相关用法写下来:

1.索引器允许您按照与数组相同的方式对类、结构或接口进行索引,要声明类或结构上的索引器,请使用 this 关键字。

2.索引器类型及其参数类型必须至少如同索引器本身一样是可访问的。

3.索引器的签名由其形参的数量和类型组成。它不包括索引器类型或形参名。如果在同一类中声明一个以上的索引器,则它们必须具有不同的签名。

4.索引器值不属于变量;因此,不能将索引器值作为 refout 参数进行传递。

5.C# 并不将索引类型限制为整数。例如,对索引器使用字符串可能是有用的。通过搜索集合内的字符串并返回相应的值,可以实现此类的索引器。由于访问器可被重载,字符串和整数版本可以共存。

原文地址:https://www.cnblogs.com/lxGIS/p/3333916.html