初见继承威力

来源:互联网 发布:linux制作pe启动盘 编辑:程序博客网 时间:2024/04/27 14:46
我们来描述一个数据结构,一个公司,下有很多部门,一个部门有很多职员。

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        }

继续优化,请看下篇,索引器的重载
原创粉丝点击