黑马程序员技术交流社区

标题: 索引器访问问题 [打印本页]

作者: 闫常国    时间: 2013-5-10 22:28
标题: 索引器访问问题
本帖最后由 闫常国 于 2013-5-11 21:52 编辑

namespace t2
{
    class Program
    {
        static void Main(string[] args)
        {
            Student s1 = new Student("张三",20);
            Console.WriteLine(s1.Age);
            Console.ReadKey();
        }
      
    }
    class Student
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int age;
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        public Student(string name,int age)
        {
            this.name = name;
            this.age = age;
        }
        //定义索引器,通过年龄访问
        public Student this[int age]
        {
            get {
                return Student[index];  //这里应该怎样通过年龄来操作对象的属性
            }
        }
    }
}

作者: 许庭洲    时间: 2013-5-11 06:23
1. 用reflector反编译可以看出,索引器的内部本质上就是set_item和get_item方法;
2. 索引器允许类或结构的实例就像数组一样进行索引;
3. 索引器类似于属性,不同之处在于它们的访问器采用参数;
举个例子:
// Using a string as an indexer value
class DayCollection
{
   string[] days = { "Sun", "Mon", "Tues","Wed", "Thurs", "Fri", "Sat" };
    //This method finds the day or returns -1
   private int GetDay(string testDay)
    {
       int i = 0;
       foreach (string day in days)
        {
           if (day == testDay)
            {
               return i;
           }
           i++;
        }
       return -1;
    }
    // Theget accessor returns an integer for a given string
    publicint this[string day]
    {
       get
        {
           return (GetDay(day));
        }
    }
}
class Program
{
    staticvoid Main(string[] args)
    {
       DayCollection week = new DayCollection();
       System.Console.WriteLine(week["Fri"]);
       System.Console.WriteLine(week["Made-up Day"]);
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
输出
5
-1
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



作者: 王宝生    时间: 2013-5-11 06:33
你把你加注释的那句话改成return this[age].就好了。不过,你这样做没有什么意思,因为索引器一般是用于集合中的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2