天天看点

初见继承威力

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

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, 我们再来处理职员的集合

初见继承威力

public class StaffCollection : System.Collections.CollectionBase

初见继承威力
初见继承威力
初见继承威力

 public int Add(string name)

初见继承威力
初见继承威力

 return Add(name, Sex.Man);

初见继承威力
初见继承威力
初见继承威力

 public int Add(string name, Sex sex)

初见继承威力
初见继承威力

 return Add(new Staff(name, sex));

初见继承威力
初见继承威力

 public int Add(Staff staff)

初见继承威力
初见继承威力

 return this.List.Add(staff);

初见继承威力
初见继承威力

 public void AddRange(Staff[] staffs)

初见继承威力
初见继承威力

 for (int i = 0; i <= staffs.Length - 1; i++)

初见继承威力
初见继承威力

 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

初见继承威力

我们再定义部门的数据结构,该结构包含了职员的集合

初见继承威力

public class Department

初见继承威力
初见继承威力

 public StaffCollection Staffs=new StaffCollection();

初见继承威力
初见继承威力

 public Department(string name)

初见继承威力
初见继承威力

 Name=name;

初见继承威力
初见继承威力
初见继承威力

再对StaffCollection依葫芦画瓢,再写一个DepartmentCollection

初见继承威力

public class DepartmentCollection : System.Collections.CollectionBase

初见继承威力
初见继承威力

 public int Add(string departmentName)

初见继承威力
初见继承威力

 return Add(new Department(departmentName));

初见继承威力
初见继承威力
初见继承威力

 public int Add(Department department)

初见继承威力
初见继承威力

 return this.List.Add(department);

初见继承威力
初见继承威力

 public void AddRange(Department[] departments)

初见继承威力
初见继承威力

 for (int i = 0; i <= departments.Length - 1; i++)

初见继承威力
初见继承威力

 Add(departments[i]);

初见继承威力
初见继承威力
初见继承威力
初见继承威力

 public void Remove(Department department)

初见继承威力
初见继承威力

 this.List.Remove(department);

初见继承威力
初见继承威力
初见继承威力

 public Department[] ToArray()

初见继承威力
初见继承威力

 Department[] tmpDepartments = new Department[this.Count];

初见继承威力
初见继承威力
初见继承威力

 tmpDepartments[i] = (Department)this[i];

初见继承威力
初见继承威力

 return tmpDepartments;

初见继承威力
初见继承威力
初见继承威力

 public Department this[int index]

初见继承威力
初见继承威力
初见继承威力
初见继承威力
初见继承威力
初见继承威力
初见继承威力
初见继承威力

 return (Department)this.List[index];

初见继承威力
初见继承威力
初见继承威力
初见继承威力
初见继承威力

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

最后,我们实现公司的结构

初见继承威力

 public class Company

初见继承威力
初见继承威力

 public DepartmentCollection Departments = new DepartmentCollection();

初见继承威力

现在我们有了5个类

Company

---DepartmentCollection

------Department

---------StaffCollection

------------Staff

我们看下具体的应用

初见继承威力

public static void Main(string[] args)

初见继承威力
初见继承威力
初见继承威力

 Company com = new Company();

初见继承威力

 com.Departments.Add("HR");

初见继承威力

 com.Departments.Add("Market");

初见继承威力

 com.Departments.Add("Development");

初见继承威力
初见继承威力

 com.Departments[0].Staffs.Add("Alice");

初见继承威力

 com.Departments[0].Staffs.Add("Amy");

初见继承威力

 com.Departments[0].Staffs.Add("Ellen");

初见继承威力

 com.Departments[2].Staffs.Add("Albert");

初见继承威力

 com.Departments[2].Staffs.Add("Mark");

初见继承威力

 com.Departments[2].Staffs.Add("Kevin");

初见继承威力

 com.Departments[2].Staffs.Add("Neil");

初见继承威力
初见继承威力

 for (int i = 0; i <= com.Departments.Count - 1; i++)

初见继承威力
初见继承威力

 System.Console.WriteLine(com.Departments[i].Name);

初见继承威力

 for (int j = 0; j <= com.Departments[i].Staffs.Count - 1; j++)

初见继承威力
初见继承威力

 System.Console.WriteLine("/t{0}{1}", com.Departments[i].Staffs[j].Name, com.Departments[i].Staffs[j].Sex == Sex.Man ? "先生" : "女士");

初见继承威力
初见继承威力
初见继承威力
初见继承威力
初见继承威力

继续优化,请看下篇,索引器的重载

本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806277

继续阅读