当前位置:  开发笔记 > 编程语言 > 正文

C#索引器的优点是什么?

如何解决《C#索引器的优点是什么?》经验,为你挑选了3个好方法。

做了一些代码阅读,并偶然发现了我之前从未见过的片段:

public SomeClass {
  public someInterface this[String strParameter] {
    get {
      return SomeInternalMethod(strParameter);
    }
  }
}

它看起来像是如下调用:

SomeClass _someClass = new SomeClass();
SomeInterface returnedValue = _someClass["someString"];

我感兴趣的是这个函数适合的地方或者这种风格的写作意图.例如,为什么这比简单地调用函数更受欢迎?



1> Eric Lippert..:

请参阅语言规范,第10.9节,其中规定:

一个分度器是使得以相同的方式作为数组要索引的对象的构件.

索引器和属性在概念上非常相似,但在以下方面有所不同:

属性由其名称标识,而索引器由其签名标识.

通过简单名称(第7.5.2节)或成员访问(第7.5.4节)访问属性,而通过元素访问(第7.5.6.2节)访问索引器元素.

属性可以是静态成员,而索引器始终是实例成员.

属性的get访问器对应于没有参数的方法,而索引器的get访问器对应于具有与索引器相同的形式参数列表的方法.

属性的set访问器对应于具有名为value的单个参数的方法,而索引器的set访问器对应于具有与索引器相同的形式参数列表的方法,以及名为value的附加参数.

索引器访问器声明与索引器参数同名的局部变量是编译时错误.

在重写属性声明中,使用语法base.P访问继承的属性,其中P是属性名称.在重写索引器声明中,使用语法base [E]访问继承的索引器,其中E是逗号分隔的表达式列表.


我刚检查了设计说明档案,没有任何证据表明没有静态索引器的决定.因此,我必须回到我通常的解释,为什么我们没有一个功能:没有人认为花钱赚钱是一个很好的想法.我想这个相同的解释也解释了为什么索引器不能是通用的.
我知道我不应该劫持这个,但也许你可以写博客,说明为什么没有静态索引器?当我看到它们不存在时,我感到很震惊,因为它是一种非常好的,简洁的方式.(在Jon之前提出好的编码["UTF8"]示例:))

2> devuxer..:

似乎很多答案都集中在索引器上,而不是为什么要使用索引器.

就我而言,这是使用索引器的动机:

您正在处理具有某种集合的类,但您希望该类对用户(该类的使用者)显示,就像它一个集合一样.

我能想到的最好的例子是DataRowADO.NET中的类.如果你想获得a的第五个单元格的值DataRow,你可以使用DataRow.Item[4]DataRow[4].后一种形式是一种方便和逻辑的快捷方式,它很好地展示了为什么你想要使用索引器.对于用户来说,DataRow可以将其视为一组单元格(即使它确实不止于此),因此能够直接获取和设置单元格值是有意义的,而不必记住您实际上正在获取/设置Item.

希望有所帮助.



3> Erich..:

在许多情况下,'index'语法很有意义.如果SomeClass代表某种集合,它特别有用.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有