黑马程序员——C#面向对象之索引器

来源:互联网 发布:java rest api是什么 编辑:程序博客网 时间:2024/05/19 19:44

-------Windows Phone 7手机开发、.Net培训、期待与您交流! -------

     -->C#面向对象——索引器,开始学完之后,感觉要写得这么麻烦,有什么用啊,可是当与普通使用集合之后,索引器的作用那是没话说,太给力了。

     -->集合——ArrayList具有很强的通用性,集合方法:Add与AddRange、Insert与InsertRange、Remove与RemoveAt、Sort与Reverse、IndexOf与LastIndexOf、Contains等,集合可以通过索引来访问,但是有局限性,但是通过索引器就不一样了。

     -->集合与索引器的比较:

     -->集合——ArrayList的例子

     class Person
     {
         private string name;
         private char gender;
         private int age;
         public Person(string name, int age, char gender)
         {
                    this.name = name;
                    this.age = age;
                    this.gender = gender;
         }
         public void SayHello()
         {
                    Console.WriteLine("大家好,我叫{0},今年{1}岁了,是一名{2}生!",name,age,gender);
         }

     }

     //使用集合——ArrayList
    ArrayList al = new ArrayList();
    al.Add(new Person("zhangsan",23,'男'));
    al.Add(new Person("xiaolan",34,'女'));
    //遍历,让集合al中的所有对象执行方法      
    for (int i = 0; i < al.Count; i++)
    {

         //由于al[i]是object类型的,所以要强制转换
         Person p = (Person)al[i];

         p.SayHello();
         //或者用((Person)al[i]).SayHello();
    }

     -->索引器的例子

    class Person2
    {
        ArrayList al;
        public Person2()
        {
            al = new ArrayList();
        }
        public int Count
        {
            get { return al.Count; }
        }

        //只写一个添加和索引
        public int Add(Person p)
        {
            return al.Add(p);
        }
        public Person this[int index]
        {
            get { return (Person)al[index]; }
            set {al[index]=value;}
        }
    }

    //使用索引器

        Person2 p2 = new Person2();
        p2.Add(new Person("zhangsan",23,'男'));
        p2.Add(new Person("xiaolan",33,'女'));
        for (int i = 0; i < p2.Count; i++)
        {
                p2[i].SayHello();
        }

     -->((Person)al[i]).SayHello();与p2[i].SayHello();两者的代码比较可读性还是理解难度都是显而易见的。

     -->索引器语法:

         [访问修饰符]  返回类型  this[索引类型 索引名] //this在类的内部,代表当前实例,引用。

         {

                 //get或set方法体

         }

     -->索引器是为了方便将类、结构等“非数组”当做“数组”来使用,用于封装内部集合的内容,可以包括任何东西。

-------Windows Phone 7手机开发、.Net培训、期待与您交流! -------

原创粉丝点击