索引器的重载

本文通过重载C#中的this索引器来优化对公司部门及其员工的访问方式,使得代码更加简洁易读。文章展示了如何为DepartmentCollection及Department类添加此特性,并提供了改进前后的代码对比。
1None.gifCompanycom=newCompany();
2None.gifcom.Departments.Add("HR");
3None.gifcom.Departments.Add("Market");
4None.gifcom.Departments.Add("Development");
5None.gif
6None.gifcom.Departments[0].Staffs.Add("Alice");
7None.gifcom.Departments[0].Staffs.Add("Amy");
8None.gifcom.Departments[0].Staffs.Add("Ellen");
9None.gifcom.Departments[2].Staffs.Add("Albert");
10None.gifcom.Departments[2].Staffs.Add("Mark");
11None.gifcom.Departments[2].Staffs.Add("Kevin");
12None.gifcom.Departments[2].Staffs.Add("Neil");
13None.gif
14None.gifSystem.Console.WriteLine(com.Departments[0].Staffs[1].Name);
在循环处理的时候,第14行自然没有什么不好的地方,但如果像14行那样,要直接访问某个部门,用int的索引似乎显得太突兀。

我们优化DepartmentCollection的this索引器,重载this
1None.gifpublicDepartmentthis[intindex]
2ExpandedBlockStart.gifContractedBlock.gifdot.gif{
3InBlock.gifset
4ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
5InBlock.gifthis.List[index]=value;
6ExpandedSubBlockEnd.gif}

7InBlock.gifget
8ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
9InBlock.gifreturn(Department)this.List[index];
10ExpandedSubBlockEnd.gif}

11ExpandedBlockEnd.gif}

12None.gif
13None.gifpublicDepartmentthis[stringname]
14ExpandedBlockStart.gifContractedBlock.gifdot.gif{
15InBlock.gifget
16ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
17InBlock.giffor(inti=0;i<=this.List.Count-1;i++)
18ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
19InBlock.gifif(((Department)this.List[i]).Name==name)
20ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
21InBlock.gifreturnthis[i];
22ExpandedSubBlockEnd.gif}

23ExpandedSubBlockEnd.gif}

24InBlock.gifreturnnull;
25ExpandedSubBlockEnd.gif}

26InBlock.gif
27ExpandedBlockEnd.gif}

然后,我们继续优化Department
1None.gifpublicclassDepartment
2ExpandedBlockStart.gifContractedBlock.gifdot.gif{
3InBlock.gifpublicStaffCollectionStaffs=newStaffCollection();
4InBlock.gif
5InBlock.gifpublicDepartment(stringname)
6ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
7InBlock.gifName=name;
8ExpandedSubBlockEnd.gif}

9InBlock.gifpublicreadonlystringName;
10InBlock.gif
11InBlock.gifpublicStaffthis[intindex]
12ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
13InBlock.gifset
14ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
15InBlock.gifStaffs[index]=value;
16ExpandedSubBlockEnd.gif}

17InBlock.gifget
18ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
19InBlock.gifreturnStaffs[index];
20ExpandedSubBlockEnd.gif}

21ExpandedSubBlockEnd.gif}

22ExpandedBlockEnd.gif}
加了第11行的this。

现在的调用代码是
1None.gifCompanycom=newCompany();
2None.gifcom.Departments.Add("HR");
3None.gifcom.Departments.Add("Market");
4None.gifcom.Departments.Add("Development");
5None.gif
6None.gifcom.Departments[0].Staffs.Add("Alice");
7None.gifcom.Departments[0].Staffs.Add("Amy");
8None.gifcom.Departments[0].Staffs.Add("Ellen");
9None.gifcom.Departments[2].Staffs.Add("Albert");
10None.gifcom.Departments[2].Staffs.Add("Mark");
11None.gifcom.Departments[2].Staffs.Add("Kevin");
12None.gifcom.Departments[2].Staffs.Add("Neil");
13None.gif
14None.gifSystem.Console.WriteLine(com.Departments["Development"][1].Name);

注意第14行,是不是优雅多了啊?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值