BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

文章:通过索引器简化C#类型信息访问

| 作者 王翔(Vision Wang) 关注 0 他的粉丝 发布于 2008年7月14日. 估计阅读时间: 1 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

对象封装时,往往要考虑采用简洁的方式提供对类型内部成员的访问,作为C#的一个语法特性——索引器非常适合完成该任务。

索引器(Indexer)可以让客户程序用近似数组的方式访问对象内部成员,将访问方法封装为索引器可以令客户代码更为简洁、直观。不过.NET的索引器还提供基于联合键(Federated Key)的访问,利于对于一些结构比较复杂(尤其是那些同时受到多个纬度、多个属性制约而导致变化)的类型以简单的方式访问。

基于.NET提供的托管委托机制,索引器设计上除了可以把键值作为参数外,还可以把检索过程中需要执行的规则和算法以委托的形式传递给索引器,在更大程度上提高了目标对象检索的灵活性,同时尽量保持目标类型检索接口的稳定性。

随着.NET 过渡到3.5版本,LINQ作为一个具有普遍适应性的“实体/数据”技术,简化对各种异构数据的访问。索引器可以把LINQ作为具体实现技术,在提供简单访问接口的同时,提供对各种异构数据的统一检索。

了解更多的内容,请观看完整文章通过索引器简化C#类型信息访问

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

怎么说呢,我还是觉得接受Lambda Expression的索引器要慎用 by Jeffrey Zhao

其实索引器和我们额外写的某个Get方法在内部实现上几乎完全相同,执行效果也一样,更没有比如性能上的差别。
但是索引器给人的感觉就是一个非常单纯的“取”操作,例如通过key查找value,通过数组的下标取元素等等。
而Lambda Expression实际上是包含语义的,可能表达的是复杂筛选操作;同样比如传入一个City对象,然后根据它的状态来获取一些东西(比如相关产品)。
对于这种情况,我在设计接口时更倾向于写一个Get方法而不是索引器……

Re: 怎么说呢,我还是觉得接受Lambda Expression的索引器要慎用 by 麦 书

其实很多开源软件中都很难看到索引器的使用,尤其是那些从Java移过来的。
经常使用索引器属与某个人编码个性有关,尤其对于后面传递委托的例子,感觉是纯粹为了秀语法,和要完成的功能关系不大。

这样的代码适合个人项目 by 江天 皓月

我敢说十人有八个人没有这种使用索引器的习惯,你的代码在团队中让其他人难以阅读,除非索引器用得非常有必要。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

3 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT