C# 索引器的意义或好处是什么?

标签 c# methods indexer

在阅读代码时偶然发现了这个我以前从未见过的片段:

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

好像是这样调用的:

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

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

最佳答案

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

Indexer是一个成员,它使对象能够以与数组相同的方式进行索引。

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

  • 属性由其名称标识,而索引器由其签名标识。
  • 通过简单名称(§7.5.2)或成员访问(§7.5.4)访问属性,而通过元素访问(§7.5.6.2)访问索引器元素。<
  • 属性可以是静态成员,而索引器始终是实例成员。
  • 属性的 get 访问器对应于没有参数的方法,而索引器的 get 访问器对应于具有与索引器相同形式参数列表的方法。
  • 属性的集合访问器对应于具有名为值的单个参数的方法,而索引器的集合访问器对应于具有与索引器相同的形式参数列表的方法,外加一个名为值的附加参数。<
  • 索引器访问器声明与索引器参数同名的局部变量是编译时错误。
  • 在覆盖属性声明中,使用语法 base.P 访问继承的属性,其中 P 是属性名称。在覆盖索引器声明中,使用语法 base[E] 访问继承的索引器,其中 E 是逗号分隔的表达式列表。

关于C# 索引器的意义或好处是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2016837/

相关文章:

Java:修改不带参数的变量

c# - Azure Web 角色——如何保护开源项目?

c# - 为什么 linq-2-sql 会创建额外的不必要的对象?

javascript - 在 IE8 中恢复被覆盖的 JavaScript 方法

objective-c - 对于 Objective-C ... 指向方法的指针

ref - 带有 Ref Return 的 C# 索引器也支持集合

c# - C# 中的项目属性

c# - 了解网络服务器上的 LinkDemand 安全性

javascript - 如何使用 selenium Web 驱动程序或使用 Javascript 防止页面重新加载?

c# - 索引器是否应该始终引用离散序列?