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行,是不是优雅多了啊?
  • 相关阅读:
    linux 树型显示文件 tree ls tree 命令
    Linux常用命令大全
    My kingdom for a good timer! 规格严格
    org.dom4j.DocumentException: no protocol 规格严格
    利用GetObject("WinMgmts:")获取系统信息 规格严格
    给力URL 规格严格
    几个Servlet小Sample网站 规格严格
    使用SQL PLUS生成报表 规格严格
    High Resolution Timer in Java 5 规格严格
    GC调优文章精选:逐步添加 规格严格
  • 原文地址:https://www.cnblogs.com/shyleoking/p/648808.html
Copyright © 2011-2022 走看看