簡體   English   中英

為什么.Net FCL正在實現通用和非通用接口IList和IList <T> 在列表中 <T> 同時上課?

[英]Why .Net FCL is implementing generic and non-generic interface IList and IList<T> in List<T> class at same time?

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; }
}

微軟容易幫助.NET程序員忘記COM的存在。 然而,這並不接近現實,COM仍然存在並且仍然是Windows上的主要互操作技術。 就像最近的一個例子一樣,Store和Phone應用程序中的Modern UI純粹是基於COM的。 雖然非常小心隱藏,但在編寫C#應用程序時幾乎沒有辦法告訴您實際使用的是COM。 除了看似黑色的魔術,毫不費力地使用Javascript或C ++編寫的代碼。

.NET中的泛型是一個互操作問題,它是一個純.NET實現細節,其他非.NET語言完全不知道。 所以List<T>不能是[ComVisible(true)]

IList,ICollection和IEnumerable,可以通過幾乎任何語言編寫的代碼來實現 ComVisible和可用的接口。

這是一個兼容性問題。 有許多組件(例如,在UI庫中),它們使用非通用IList ,因為通用版本的使用不是必需的,並且在這里通常是不可取的。

考慮這個WPF示例:

var list = new List<MyDataType>();
var collectionView = new ListCollectionView(list);

假設, List<T>沒有實現IList - 您只是無法在此示例中使用它。 而且,想象一下, ListCollectionView必須是通用的,並嘗試實現它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM