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行,是不是优雅多了啊?
  • 相关阅读:
    如何锻炼出最牛程序员的编码套路
    如果仔细观察他们,你会发现他们时时都在锻炼
    单纯地每天埋头于工作并不能算是真正意义上的锻炼
    把全世界的人们都联系在一起,提升人们的社交参与度
    HTML5十五大新特性
    html5的八大特性
    【贪心】【二维偏序】【权值分块】bzoj1691 [Usaco2007 Dec]挑剔的美食家
    【分块】【链表】bzoj2738 矩阵乘法
    【分块】bzoj3343 教主的魔法
    【线段树】bzoj3747 [POI2015]Kinoman
  • 原文地址:https://www.cnblogs.com/shyleoking/p/648808.html
Copyright © 2011-2022 走看看