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);
在循环处理的时候,第14行自然没有什么不好的地方,但如果像14行那样,要直接访问某个部门,用int的索引似乎显得太突兀。
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);我们优化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
}
加了第11行的this。
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
}现在的调用代码是
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行,是不是优雅多了啊?

浙公网安备 33010602011771号