Как определить поведение индексатора для интерфейса?

Можно ли добавить поведение индексатора из интерфейса?

что-то вроде этого:

interface IIndexable<T>
{
   T this[string index];
}

Ответ 1

Да, это возможно. Фактически, все, что вам не хватает, это getter/setter на вашем индексере. Просто добавьте его следующим образом:

interface IIndexable<T>
{
     T this[string index] {get; set;}
}

Ответ 2

От MSDN:

public interface ISomeInterface
{
    //...

    // Indexer declaration:
    string this[int index]
    {
        get;
        set;
    }
}

Индексаторы могут быть объявлены на интерфейсе (С# Reference). Аксессуар индексаторы интерфейса отличаются от аксессуаров индексаторов классов в следующими способами:

  • Аксессоры интерфейса не используют модификаторы.
  • Аксессуар интерфейса не имеет тела.

Ответ 3

Более общий общий интерфейс (взятый из IDictionary<,>):

interface IIndexable<TKey, TValue>
{
    TValue this[TKey key] { get; set; }
}

Мне просто интересно, почему они не включили его в mscorlib, так что IDictionary мог его реализовать. Это имело бы смысл.