List在.NET中以下列方式实现 我很惊讶为什么他们同时在课堂上实现了泛型和非泛型接口。
[Serializable]
public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>,
IList, ICollection, IEnumerable {
public List();
public void Add(T item);
public Int32 BinarySearch(T item);
public void Clear();
public Boolean Contains(T item);
public Int32 IndexOf(T item);
public Boolean Remove(T item);
public void Sort();
public void Sort(IComparer<T> comparer);
public void Sort(Comparison<T> comparison);
public T[] ToArray();
public Int32 Count { get; }
public T this[Int32 index] { get; set; }
}
答案 0 :(得分:3)
Microsoft使非常易于帮助.NET程序员忘记COM存在。然而,这并不接近现实,COM仍然存在并且仍然是Windows上的主要互操作技术。就像最近的一个例子一样,Store和Phone应用程序中的Modern UI纯粹是基于COM的。虽然非常小心隐藏,但在编写C#应用程序时几乎没有办法告诉您实际使用的是COM。除了看似黑色的魔术,毫不费力地使用Javascript或C ++编写的代码。
.NET中的泛型是一个互操作问题,它是一个纯.NET实现细节,其他非.NET语言完全不知道。因此List<T>
不能是[ComVisible(true)]
。
IList,ICollection和IEnumerable救援,接口 可以通过Windows上几乎任何语言编写的代码进行ComVisible和使用。
答案 1 :(得分:1)
这是一个兼容性问题。
有许多组件(例如,在UI库中),它们使用非通用IList
,因为通用版本的使用不是必需的,而且在这里通常是不可取的。
考虑这个WPF样本:
var list = new List<MyDataType>();
var collectionView = new ListCollectionView(list);
假设List<T>
没有实现IList
- 您只是无法在此示例中使用它。而且,想象一下,ListCollectionView
必须是通用的,并尝试实现它。