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);
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);
在循环处理的时候,第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
}
public
Department
this
[
int
index]2
{3
set4
{5
this.List[index] = value;6
}7
get8
{9
return (Department)this.List[index];10
}11
}
12

13
public
Department
this
[
string
name]14
{15
get16
{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
}
然后,我们继续优化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
}
public
class
Department2
{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
set14
{15
Staffs[index] = value;16
}17
get18
{19
return Staffs[index];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);
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);
注意第14行,是不是优雅多了啊?
本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806275