索引器

索引器其实也是类的一种成员,它使得对象可以像数组一样被索引,当一个类包含数组或集合成员时,索引器将大大简化对数组或集合成员的存取操作

参数的个数和类型都是任意的。用reflector反编译可以看出,索引器的内部本质上就是set_itemget_item方法


看下面的实例,先定义一个图书类

    class Book
    {
        private string _title;
        public Book(string title)
        {
            _title = title;
        }
        public string Title
        {
            get { return _title; }
        }
    }

再定义一个书架类,里面包含图书数组

class BookStack
    {
        Book[] books;
        public BookStack(int size)
        {
            books = new Book[size];
        }

        //通过索引访问图书数组
        public Book this[int index]
        {
            get
            {
                if (index < 0 || index >= books.Length)
                {
                    return null;
                }
                return books[index];
            }
            set
            {
                if (index < 0 || index >= books.Length)
                {
                    return;
                }
                books[index] = value;
            }
        }
        //通过书名访问数组
        public Book this[string title]
        {
            get 
            {
                foreach (Book p in books)
                {
                    if (p.Title == title)
                    {
                        return p;
                    }
                }
                return null;
            }
        }
    }

主程序中调用

            BookStack bookstack = new BookStack(3);
            Book first = new Book("西游记");
            Book second = new Book("水浒传");
            Book third = new Book("三国寅义");
            bookstack[0] = first;
            bookstack[1] = second;
            bookstack[2] = third;

            Console.WriteLine(bookstack[2].Title);  //三国寅义

            Book newbook = bookstack["水浒传"];
            Console.WriteLine(newbook.Title);      //水浒传
            Console.ReadKey();
索引器和属性进行比较

索引器与属性都是类的成员,语法上非常相似。索引器一般用在自定义的集合类中,使用索引器来操作集合对象如同使用数组一样简单;

而属性可用于任何自定义的类中,它增强了类中的字段的灵活性

属性 :允许调用方法,如同公共数据成员;可通过简单的名称进行访问;可以为静态成员或者是实例成员;其get访问器没有参数,其set访问器其包含隐式的参数value

属性里面的get;set;访问器其实就是俩个get,set,方法







索引器 :允许调用对象上的方法 ,如同对象是一个数组 ;必须是实例成员;其get,set访问器具有与索引器相同的形参表


索引里面其实就是俩个set_Item,get_Item方法





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值