zoukankan      html  css  js  c++  java
  • 索引器的重载

     1            Company com = new Company();
     2            com.Departments.Add("HR");
     3            com.Departments.Add("Market");
     4            com.Departments.Add("Development");
     5
     6            com.Departments[0].Staffs.Add("Alice");
     7            com.Departments[0].Staffs.Add("Amy");
     8            com.Departments[0].Staffs.Add("Ellen");
     9            com.Departments[2].Staffs.Add("Albert");
    10            com.Departments[2].Staffs.Add("Mark");
    11            com.Departments[2].Staffs.Add("Kevin");
    12            com.Departments[2].Staffs.Add("Neil");
    13
    14            System.Console.WriteLine(com.Departments[0].Staffs[1].Name);
    在循环处理的时候,第14行自然没有什么不好的地方,但如果像14行那样,要直接访问某个部门,用int的索引似乎显得太突兀。

    我们优化DepartmentCollection的this索引器,重载this
     1        public Department this[int index]
     2        {
     3            set
     4            {
     5                this.List[index] = value;
     6            }

     7            get
     8            {
     9                return (Department)this.List[index];
    10            }

    11        }

    12
    13        public Department this[string name]
    14        {
    15            get
    16            {
    17                for (int i = 0; i <= this.List.Count - 1; i++)
    18                {
    19                    if (((Department)this.List[i]).Name == name)
    20                    {
    21                        return this[i];
    22                    }

    23                }

    24                return null;
    25            }

    26
    27        }

    然后,我们继续优化Department
     1public class Department
     2    {
     3        public StaffCollection Staffs = new StaffCollection();
     4
     5        public Department(string name)
     6        {
     7            Name = name;
     8        }

     9        public readonly string Name;
    10
    11        public Staff this[int index]
    12        {
    13            set
    14            {
    15                Staffs[index] = value;
    16            }

    17            get
    18            {
    19                return Staffs[index];
    20            }

    21        }

    22    }
    加了第11行的this。

    现在的调用代码是
     1            Company com = new Company();
     2            com.Departments.Add("HR");
     3            com.Departments.Add("Market");
     4            com.Departments.Add("Development");
     5
     6            com.Departments[0].Staffs.Add("Alice");
     7            com.Departments[0].Staffs.Add("Amy");
     8            com.Departments[0].Staffs.Add("Ellen");
     9            com.Departments[2].Staffs.Add("Albert");
    10            com.Departments[2].Staffs.Add("Mark");
    11            com.Departments[2].Staffs.Add("Kevin");
    12            com.Departments[2].Staffs.Add("Neil");
    13
    14            System.Console.WriteLine(com.Departments["Development"][1].Name);

    注意第14行,是不是优雅多了啊?
  • 相关阅读:
    查看MySQL数据库版本
    PHP如何查找一列有序数组是否包含某值(二分查找)
    TP数据查询给sql给查询加一个虚拟字段值
    TP SQL统计查询语法
    PHP如何对一组数进行重新排列(冒泡算法)
    python入门及数字、字符串类型
    GitHub及Git及GitHub搭建个人网站
    Editplus的扩展程序的删除
    50个SQL语句(MySQL版) 问题十五
    50个SQL语句(MySQL版) 问题十四
  • 原文地址:https://www.cnblogs.com/shyleoking/p/648808.html
Copyright © 2011-2022 走看看