C# 索引器

一、索引器,类似于数组,它可以让你在实例化之后像数组一样通过索引调用对象,但是又和数组不同:

1、索引器可以重载;

2、索引器的[index]值类型不受限制;

3、索引器不是一个变量。

 

二、索引器和属性也相像,但是又和属性不同:

1、属性以名称来标识,索引器以函数形式来标识,即索引器可以有参数列表;

2、属性不可以重载,索引器可以;

3、属性可以声明为static,索引器不可以。

 

Main方法:

class Indexer
    {
        static void Main(string[] args)
        {
            //索引器的简单示例
            IndexerClassDemo indexer = new IndexerClassDemo();
       //索引器重载示例 IndexerReloadClassDemo indexerReload = new IndexerReloadClassDemo();
       //索引器多参示例 IndexerParamtersClassDemo indexerParamters = new IndexerParamtersClassDemo(); //索引器赋值 indexer[0] = "Zhangs"; indexer[1] = "Lis"; indexer["Demo001"] = "Demo001"; indexer["Demo002"] = "Demo002"; indexerReload[0] = "Relaod001"; indexerReload[1] = "Relaod002"; indexerReload["Relaod003"] = 3; indexerParamters["Ls", "Xi'an"] = 17; //输出索引器的值,其实就是调用其get方法。 Console.WriteLine(indexer[0]); Console.WriteLine(indexer["Demo002"]); Console.WriteLine(indexerReload["Relaod003"].ToString()); Console.WriteLine(indexerParamters["Ls", "Xi'an"]); Console.ReadKey(); } }

  

索引器的简单示例:

/// <summary>
    /// 简单应用实例
    /// </summary>
    public class IndexerClassDemo
    {
        //所引起必须以  this  关键字定义,其实这个  this  就是实例化后的对象
        private string[] name = new string[2];
        public string this[int index]
        {
            //实现所引起的get方法
            get
            {
                if (index < 3)
                {
                    return name[index];
                }
                return null;
            }
            //实现所引起的set方法
            set
            {
                name[index] = value;
            }
        }

        private Hashtable ht = new Hashtable();        
        public string this[string index]
        {
            get
            {
                return ht[index].ToString();
            }
            set
            {
                ht.Add(index, value);
            }
        }
    }

索引器的重载示例:

/// <summary>
    /// 索引器的重载
    /// </summary>
    public class IndexerReloadClassDemo
    {
        //所引起必须以  this  关键字定义,其实这个  this  就是实例化后的对象
        private Hashtable ht = new Hashtable();
        public string this[int indexReload]
        {
            get
            {
                return ht[indexReload].ToString();
            }
            set
            {
                ht.Add(indexReload, value);
            }
        }

        public int this[string name]
        {
            get
            {
                foreach (DictionaryEntry de in ht)
                {
                    if (de.Value.ToString() == name)
                    {
                        return Convert.ToInt32(de.Key);
                    }
                }
                return -1;
            }
            set
            {
                ht.Add(value, name);
            }
        }
    }

索引器多参示例:

/// <summary>
    /// 多参索引器
    /// </summary>
    public class IndexerParamtersClassDemo
    {
        private ArrayList al;
        public IndexerParamtersClassDemo()
        {
            al = new ArrayList();
        }

        public int this[string name, string addr]
        {
            get
            {
                foreach (PersonInforMessage info in al)
                {
                    if (info.Name == name && info.Addr == addr)
                    {
                        return info.Age;
                    }
                }
                return -1;
            }
            set
            {
                al.Add(new PersonInforMessage(name, addr, Convert.ToInt32(value)));
            }
        }
    }

    public class PersonInforMessage
    {
        private string name;
        private string addr;
        private int age;

        public PersonInforMessage(string name, string addr, int age)
        {
            this.name = name;
            this.addr = addr;
            this.age = age;
        }

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public string Addr
        {
            get { return addr; }
            set { addr = value; }
        }
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
    }
}
posted @ 2017-04-25 15:34  hanhan6494  阅读(254)  评论(0编辑  收藏  举报