天天看點

初見繼承威力

我們來描述一個資料結構,一個公司,下有很多部門,一個部門有很多職員。

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

繼續閱讀