• 也谈索引器


    一:索引器允许类和结构的实例按照与数组相同的方式进行索引,索引器类似与属性,不同之处在于他们的访问器采用参数。被称为有参属性。

    如:简单索引器实例:

     using System;

     using System.Collections.Generic;

     using System.Linq; using System.Text;

    namespace ConsoleApplication2

     {

           class Program

               {

                     static void Main(string[] args)

            {

               IndexClass Temple = new IndexClass();

               Temple[0] = "孙三";

              Temple[1] = "业四";

              Temple[2] = "宝五";

              Console.WriteLine("冠位大爷为:{0}",Temple[0]);

               Console.WriteLine("亚位大爷为:{0}", Temple[1]);

               Console.WriteLine("季位大爷为 :{0}", Temple[2]);

               Console.ReadLine();

            }

      }

         class IndexClass

           {

            private string[] name = new string[100];

            public string this[int index]

             {

               get {

                       if  (index=100)

                         return name[0];

                      else

                           return name[index];

                 }

             set

                {

                      if   (index < 0 || index > 100)

                        name[0] = value;

                      else

                        this.name[index] = value;

                }

             }

           }

    }

    上例中的索引器与数组有些相似:但是索引器与数组是有区别的体现在如下:

     1)索引器的索引值不受类型的限制。而用来访问数组的索引值一琮是整数。

     2)索引器允许重载,一个类可以有多个索引器。

    3)索引器允许类和结构的实例按照与数组相同的方式进行索引,索引器类似于属性,不同之处在于他们的访问器采用参数,被称为有参属性。

     4)属性以名称来标识,索引器以函数签名来标识。索引器可以被重载,属性则不可以被重载。属性可以为静态的,索引器属于实例成员,不能被声明为static。

     而且索引器可以是多参的也就是作为索引的参数可以为多个如下:

     using System;

     using System.Collections.Generic;

     using System.Linq; using System.Text;

    using System.Collections;

     namespace ConsoleApplication2

    {

       class Program

          {

          static void Main(string[] args)

            {

              ScoreIndex si = new ScoreIndex();

               si["张三", 1] = 90;

               si["张三", 2] = 100;

               si["张三", 3] = 98;

               si["李四", 1] = 94;

               si["李四", 2] = 88;

               si["李四", 3] = 96;

               Console.WriteLine("张三的编号为1 的成绩为:{0}",si["张三",1]);

              Console.WriteLine("张三的所有成绩为: ");

               ArrayList arrTemp; arrTemp=si["张三"];

               foreach (IndexClass item in arrTemp)

                 {

                  Console.WriteLine("姓名:"+item.Name+" 课程编号: "+item.CourseId+" 成绩: "+item.Score+"\r\n");

                 }

              Console.ReadLine();

             }

    }

       class IndexClass

        {

         private string _name;

         private int _courseId;

         private int _score;

        public IndexClass(string _name,int _courseId,int _score)

           {

             this._name = _name;

             this._courseId = _courseId;

             this._score = _score;

           }

         public string Name

           {

            get { return _name; }

            set { _name = value; }

           }

        public int CourseId

          {

            get { return _courseId; }

             set { _courseId = value; }

           }

        public int Score

        {

           get { return _score; }

           set { _score = value; }

         }

     }

      class ScoreIndex

       {

        private ArrayList arr;

         public ScoreIndex()

          {

            arr = new ArrayList();

          }

       public int this[string _name, int _courseId]

        {

           get

            {

                 foreach (IndexClass item in arr)

                   {

                       if   (item.Name == _name && item.CourseId == _courseId)

                         {

                          return item.Score;

                       }

                   }

                 return -1;

             }

           set

             {

                 arr.Add(new IndexClass(_name,_courseId,value));

              }

          }

            //重载索引器

           public ArrayList this[string _name]

            {

               get {

                     ArrayList temp = new ArrayList();

                     foreach (IndexClass a in arr)

                    {

                         if (a.Name == _name)

                           {

                               temp.Add(a);

                           }

                    }

                     return temp;

            }

     }

     }

    }

  • 相关阅读:
    iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range
    聚类_七月算法4月机器学习班第10次课程笔记
    codejam环境熟悉—Minimum Scalar Product
    STL源码剖析读书笔记--第6章&第7章--算法与仿函数
    STL源码分析读书笔记--第5章--关联式容器
    STL源码剖析读书笔记--第四章--序列式容器
    STL源码分析读书笔记--第二章--空间配置器(allocator)
    树莓PI上跑爬虫
    树莓PI安装jdk1.8,ant,maven【转】
    myeclipse10 安装 testng插件
  • 原文地址:https://www.cnblogs.com/haofaner/p/2295172.html
Copyright © 2020-2023  润新知