1
Company com
=
new
Company();
2
com.Departments.Add(
"
HR
"
);
3
com.Departments.Add(
"
Market
"
);
4
com.Departments.Add(
"
Development
"
);
5
6
com.Departments[
0
].Staffs.Add(
"
Alice
"
);
7
com.Departments[
0
].Staffs.Add(
"
Amy
"
);
8
com.Departments[
0
].Staffs.Add(
"
Ellen
"
);
9
com.Departments[
2
].Staffs.Add(
"
Albert
"
);
10
com.Departments[
2
].Staffs.Add(
"
Mark
"
);
11
com.Departments[
2
].Staffs.Add(
"
Kevin
"
);
12
com.Departments[
2
].Staffs.Add(
"
Neil
"
);
13
14
System.Console.WriteLine(com.Departments[
0
].Staffs[
1
].Name);

2

3

4

5

6

7

8

9

10

11

12

13

14

在循环处理的时候,第14行自然没有什么不好的地方,但如果像14行那样,要直接访问某个部门,用int的索引似乎显得太突兀。
我们优化DepartmentCollection的this索引器,重载this
1
public
Department
this
[
int
index]
2
{
3
set
4
{
5
this.List[index] = value;
6
}
7
get
8
{
9
return (Department)this.List[index];
10
}
11
}
12
13
public
Department
this
[
string
name]
14
{
15
get
16
{
17
for (int i = 0; i <= this.List.Count - 1; i++)
18
{
19
if (((Department)this.List[i]).Name == name)
20
{
21
return this[i];
22
}
23
}
24
return null;
25
}
26
27
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

然后,我们继续优化Department
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
11
public Staff this[int index]
12
{
13
set
14
{
15
Staffs[index] = value;
16
}
17
get
18
{
19
return Staffs[index];
20
}
21
}
22
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

加了第11行的this。
现在的调用代码是
1
Company com
=
new
Company();
2
com.Departments.Add(
"
HR
"
);
3
com.Departments.Add(
"
Market
"
);
4
com.Departments.Add(
"
Development
"
);
5
6
com.Departments[
0
].Staffs.Add(
"
Alice
"
);
7
com.Departments[
0
].Staffs.Add(
"
Amy
"
);
8
com.Departments[
0
].Staffs.Add(
"
Ellen
"
);
9
com.Departments[
2
].Staffs.Add(
"
Albert
"
);
10
com.Departments[
2
].Staffs.Add(
"
Mark
"
);
11
com.Departments[
2
].Staffs.Add(
"
Kevin
"
);
12
com.Departments[
2
].Staffs.Add(
"
Neil
"
);
13
14
System.Console.WriteLine(com.Departments[
"
Development
"
][
1
].Name);

2

3

4

5

6

7

8

9

10

11

12

13

14

注意第14行,是不是优雅多了啊?
本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806275