您的位置:首页 > 职场人生

初见继承威力

2007-02-12 22:40 330 查看
我们来描述一个数据结构,一个公司,下有很多部门,一个部门有很多职员。

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

1

public 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

}

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

1

public 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

1

public 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

我们看下具体的应用

1

public 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

}

继续优化,请看下篇,索引器的重载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息