如何重新实现 ObservableCollection.this[index]

How to Reimplement ObservableCollection.this[index]

以下未按预期工作:"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];

看来你应该只使用 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