Как переопределить ObservableCollection.this [index] - PullRequest
1 голос
/ 07 февраля 2020

Следующее не работает должным образом: "derived called" не печатается. Я новичок в C# и, возможно, мне не хватает какого-то правила.

Спасибо.

class Test<T> : ObservableCollection<T>, IList<T>, IList
{
  T IList<T>.this[int index]
  {
    get { Console.WriteLine("derived called"); return default(T); }
    set => throw new NotSupportedException();
  }

  object IList.this[int index]
  {
    get { Console.WriteLine("derived called"); return default(T); }
    set => throw new NotSupportedException();
  }
}
// ...
var t = new Test<int>() { 1 };
int i = t[0];

var oc = (ObservableCollection<int>)t;
int j = oc[0];

1 Ответ

1 голос
/ 08 февраля 2020

Кажется, вы должны просто использовать ObservableCollection, то, что вы пытаетесь, не дает никаких преимуществ. Также ObservableCollection уже содержит IList, поэтому нет необходимости делать это.

Чтобы сделать то, что вы ожидаете, будет

public class Test<T> : ObservableCollection<T>
{
    public new T this[int i]
    {
        get
        {
            Debug.WriteLine("yo");
            return base[i];
        }
        set { base[i] = value; }
    }
}

Но просто используйте ObservableCollection

...