索引器的重载

 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的索引似乎显得太突兀。

我们优化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        }

然后,我们继续优化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。

现在的调用代码是
 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);

注意第14行,是不是优雅多了啊?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值