• 初见继承威力


    我们来描述一个数据结构,一个公司,下有很多部门,一个部门有很多职员。

    ok,我们先实现职员数据结构
     1    public class Staff
     2    {
     3        //默认为男性
     4        public Staff(string name):this(name,Sex.Man)
     5        {
     6        }

     7        public Staff(string name,Sex sex)
     8        {
     9            Name = name;
    10            Sex = sex;
    11        }

    12
    13        public readonly string Name;
    14        public readonly Sex Sex;
    15    }

    16
    17    public enum Sex
    18    {
    19        Man,
    20        Female
    21    }

    then, 我们再来处理职员的集合

     1public class StaffCollection : System.Collections.CollectionBase
     2    {
     3
     4        public int Add(string name)
     5        {
     6            return Add(name, Sex.Man);
     7        }

     8
     9        public int Add(string name, Sex sex)
    10        {
    11            return Add(new Staff(name, sex));
    12        }

    13        public int Add(Staff staff)
    14        {
    15            return this.List.Add(staff);
    16        }

    17        public void AddRange(Staff[] staffs)
    18        {
    19            for (int i = 0; i <= staffs.Length - 1; i++)
    20            {
    21                Add(staffs[i]);
    22            }

    23        }

    24
    25        public void Remove(Staff staff)
    26        {
    27            this.List.Remove(staff);
    28        }

    29
    30        public Staff[] ToArray()
    31        {
    32            Staff[] tmpStaffs = new Staff[this.Count];
    33            for (int i = 0; i <= this.Count - 1; i++)
    34            {
    35                tmpStaffs[i] = (Staff)this[i];
    36            }

    37            return tmpStaffs;
    38        }

    39
    40        public Staff this[int index]
    41        {
    42            set
    43            {
    44                this.List[index] = value;
    45            }

    46            get
    47            {
    48                return (Staff)this.List[index];
    49            }

    50        }

    51
    52    }


    我们再定义部门的数据结构,该结构包含了职员的集合
     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    }

    再对StaffCollection依葫芦画瓢,再写一个DepartmentCollection
     1public class DepartmentCollection : System.Collections.CollectionBase
     2    {
     3        public int Add(string departmentName)
     4        {
     5            return Add(new Department(departmentName));
     6        }

     7
     8        public int Add(Department department)
     9        {
    10            return this.List.Add(department);
    11        }

    12        public void AddRange(Department[] departments)
    13        {
    14            for (int i = 0; i <= departments.Length - 1; i++)
    15            {
    16                Add(departments[i]);
    17            }

    18        }

    19
    20        public void Remove(Department department)
    21        {
    22            this.List.Remove(department);
    23        }

    24
    25        public Department[] ToArray()
    26        {
    27            Department[] tmpDepartments = new Department[this.Count];
    28            for (int i = 0; i <= this.Count - 1; i++)
    29            {
    30                tmpDepartments[i] = (Department)this[i];
    31            }

    32            return tmpDepartments;
    33        }

    34
    35        public Department this[int index]
    36        {
    37            set
    38            {
    39                this.List[index] = value;
    40            }

    41            get
    42            {
    43                return (Department)this.List[index];
    44            }

    45        }

    46
    47
    48    }

    注意观察DepartmentCollection和StaffCollection的ToArray方法,封装了ToArray复杂性。

    最后,我们实现公司的结构
    1    public class Company
    2    {
    3        public DepartmentCollection Departments = new DepartmentCollection();
    4    }


    现在我们有了5个类
    Company
    ---DepartmentCollection
    ------Department
    ---------StaffCollection
    ------------Staff

    我们看下具体的应用
     1public static void Main(string[] args)
     2        {
     3
     4            Company com = new Company();
     5            com.Departments.Add("HR");
     6            com.Departments.Add("Market");
     7            com.Departments.Add("Development");
     8
     9            com.Departments[0].Staffs.Add("Alice");
    10            com.Departments[0].Staffs.Add("Amy");
    11            com.Departments[0].Staffs.Add("Ellen");
    12            com.Departments[2].Staffs.Add("Albert");
    13            com.Departments[2].Staffs.Add("Mark");
    14            com.Departments[2].Staffs.Add("Kevin");
    15            com.Departments[2].Staffs.Add("Neil");
    16
    17            for (int i = 0; i <= com.Departments.Count - 1; i++)
    18            {
    19                System.Console.WriteLine(com.Departments[i].Name);
    20                for (int j = 0; j <= com.Departments[i].Staffs.Count - 1; j++)
    21                {
    22                    System.Console.WriteLine("\t{0}{1}", com.Departments[i].Staffs[j].Name, com.Departments[i].Staffs[j].Sex == Sex.Man ? "先生" : "女士");
    23                }

    24            }

    25
    26
    27        }

    继续优化,请看下篇,索引器的重载
  • 相关阅读:
    内存分配方式与变量的生存周期【转】
    C++动态内存创建与内存管理学习笔记【转】
    C内存分配问题(内存达人请进)【转】
    Singular Value Decomposition(SVD)奇异值分解【转】
    Euclidean space欧几里得空间【转】
    C语言面试题汇总(华为公司) 【转】
    C语言内存分配问题和C语言中的内存【转】
    iPhone无法在Mac的Finder中显示?如何解决问题
    OGRE 入门 三、Basic Tutorial 2 : Cameras, Lights, and Shadows
    leetcode 一个算法面试题相关的网站
  • 原文地址:https://www.cnblogs.com/shyleoking/p/648793.html
Copyright © 2020-2023  润新知