1
Companycom=newCompany();
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的索引似乎显得太突兀。
Companycom=newCompany();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);
我们优化DepartmentCollection的this索引器,重载this
1
publicDepartmentthis[intindex]
2

{
3
set
4

{
5
this.List[index]=value;
6
}
7
get
8

{
9
return(Department)this.List[index];
10
}
11
}
12
13
publicDepartmentthis[stringname]
14

{
15
get
16

{
17
for(inti=0;i<=this.List.Count-1;i++)
18

{
19
if(((Department)this.List[i]).Name==name)
20

{
21
returnthis[i];
22
}
23
}
24
returnnull;
25
}
26
27
}
publicDepartmentthis[intindex]2


{3
set4


{5
this.List[index]=value;6
}7
get8


{9
return(Department)this.List[index];10
}11
}12

13
publicDepartmentthis[stringname]14


{15
get16


{17
for(inti=0;i<=this.List.Count-1;i++)18


{19
if(((Department)this.List[i]).Name==name)20


{21
returnthis[i];22
}23
}24
returnnull;25
}26

27
}
然后,我们继续优化Department
1
publicclassDepartment
2

{
3
publicStaffCollectionStaffs=newStaffCollection();
4
5
publicDepartment(stringname)
6

{
7
Name=name;
8
}
9
publicreadonlystringName;
10
11
publicStaffthis[intindex]
12

{
13
set
14

{
15
Staffs[index]=value;
16
}
17
get
18

{
19
returnStaffs[index];
20
}
21
}
22
}
加了第11行的this。
publicclassDepartment2


{3
publicStaffCollectionStaffs=newStaffCollection();4

5
publicDepartment(stringname)6


{7
Name=name;8
}9
publicreadonlystringName;10

11
publicStaffthis[intindex]12


{13
set14


{15
Staffs[index]=value;16
}17
get18


{19
returnStaffs[index];20
}21
}22
}
现在的调用代码是
1
Companycom=newCompany();
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);
Companycom=newCompany();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行,是不是优雅多了啊?
本文通过重载C#中的this索引器来优化对公司部门及其员工的访问方式,使得代码更加简洁易读。文章展示了如何为DepartmentCollection及Department类添加此特性,并提供了改进前后的代码对比。

被折叠的 条评论
为什么被折叠?



