索引器的重载

简介:
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行,是不是优雅多了啊?



本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806275

相关文章
0 和 1 的字面量
Julia 支持整数和浮点数数据类型,以及字面量表示固定值。`zero(x)` 和 `one(x)` 函数提供类型安全的零和一字面量,减少类型转换成本。例如:`zero(Float32)` 返回 `0.0f0`,`one(Int32)` 返回 `1`。
|
应用服务中间件 Linux nginx
CentOS 9 安装 Nginx 模块 `subs_filter`
sub_filter 和 subs_filter 区别 sub_filter( 0.7.24):替换响应体(Response Body)中的文本,只能设置一组替换。 subs_filter:替换响应体(Response Body)和响应头(Response Headers)中的文本,可以设置多组替换。
614 0
|
存储 缓存 内存技术
SDL开发笔记(二):音频基础介绍、使用SDL播放音频
SDL开发笔记(二):音频基础介绍、使用SDL播放音频
SDL开发笔记(二):音频基础介绍、使用SDL播放音频
|
Apache 数据安全/隐私保护 Windows
|
2天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。
|
3天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
351 91
|
10天前
|
人工智能 自然语言处理 前端开发
Qoder全栈开发实战指南:开启AI驱动的下一代编程范式
Qoder是阿里巴巴于2025年发布的AI编程平台,首创“智能代理式编程”,支持自然语言驱动的全栈开发。通过仓库级理解、多智能体协同与云端沙箱执行,实现从需求到上线的端到端自动化,大幅提升研发效率,重塑程序员角色,引领AI原生开发新范式。
851 156