如何重新实现 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
以下未按预期工作:"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