C#基础——索引器

    索引器在语法上方便创建客户端应用程序可将其作为数组访问的类、结构或接口。

    索引器是在主要用于封装内部集合或数组的类型中实现的,使用this关键字。

  1. class TempRecord
    {
        private float[] temps=new float[10]{56.2F, 56.7F, 56.5F, 56.9F, 58.8F, 
                                                61.3F, 65.9F, 62.1F, 59.2F, 57.5F};
        public int Length
        {
            get{return temps.Length;}
        }
        
        public float this[int index]
        {
            get{return temps[index];}
            set {temps[index]=value;}
        }
    }
    public class MyClass
    {
        public static void Main()
        {
            TempRecord tempRecord=new TempRecord();
            tempRecord[3]=58.3F;
            tempRecord[5]=60.1F;
          
            for(int i=0;i<tempRecord.Length;i++)
            {
                Console.WriteLine("Element #{0} = {1}", (i+1), tempRecord[i]);
            }
           
            Console.ReadLine();
        }
    }

    输出:

 image

 

       C#并不将索引类型限制为整数:

  1. class DayCollection
    {
        string [] days={ "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };
        private int GetDay(string testDay)
        {
            int i = 0;
            foreach (string day in days)
            {
                if (day == testDay)
                {
                    return i;
                }
                i++;
            }
            return -1;
    
        }
        public int this[string day]
        {
            get{return (GetDay(day));}
        }
    }
    public class Program
    {
        public static void Main()
        {
            DayCollection week=new DayCollection();
            Console.WriteLine(week["Fri"]);
            Console.WriteLine(week["Made-up Day"]);
            Console.ReadLine();
        }
    }

   输出:

image

 

    在接口使用索引器:

  1. public interface IIndexInterface
    {
        int this[int index]
        {
            get;
            set;
        }
    }
    class IndexClass:IIndexInterface
    {
        public int [] arr=new int[100];
        public int this[int index]
        {
            get
            {
                if (index < 0 || index >= 100)
                {
                    return 0;
                }
                else
                {
                    return arr[index];
                }
            }
            set
            {
                if (!(index < 0 || index >= 100))
                {
                    arr[index] = value;
                }
            }
    
        }
    }
    public class Program
    {
        public static void Main()
        {
            IndexClass test=new IndexClass();
            test[2]=4;
            test[5]=32;
            for(int i=0;i<10;i++)
            {
                Console.WriteLine("Element #{0} = {1}", i, test[i]);
            }
            Console.ReadLine();
       }
    }

   输出:

image

posted @ 2010-01-05 23:33  Asharp  阅读(470)  评论(0编辑  收藏  举报