1

我有一个收藏课MyCollection<T>

我已经实现T this[string name]了,效果很好。

我也尝试实现T Item(string name),但当然会出现错误:

该类型MyCollection<T>已包含 Item 的定义

正如它应该。但是,我也想通过实现一个函数来重载 Item ,T Item(string, bool)但这也会引发同样的错误。

为什么编译器会认为这T Item(string, bool)与索引器冲突T Item(string)?如果它不是索引器而只是一个普通方法,那么这两个声明将是两个完全有效的重载。

4

1 回答 1

1

您绝对可以重载索引器 - 但不能使用名为Item. 要重载索引器,您只需要:

public T this[string name, bool condition]
{
    get { ... }
    set { ... }
}

编辑:好的,所以它看起来像:

  • 您不能有两个不同种类的成员(一个方法,一个属性)具有相同的名称,根据 C# 4 规范的第 10.3 节这是正确的
  • 你不能有一个 indexer一个 name 属性Item,这有点令人惊讶,因为它们都是引擎盖下的属性

我怀疑如果您使用更改索引器属性的生成名称,您可以将索引器与调用的属性一起调用,但我没有尝试过。ItemDefaultMemberAttribute

于 2012-06-27T11:09:25.467 回答