通过分析源码可以更好理解List<T>的工作方式,帮助我们写出更稳定的代码。 List<T>源码地址: https://github.com/dotnet/corefx/blob/master/src/System.Collections/src/Syst ...
通过分析源码可以更好理解List<T>的工作方式,帮助我们写出更稳定的代码。
List<T>源码地址: https://github.com/dotnet/corefx/blob/master/src/System.Collections/src/System/Collections/Generic/List.cs。
接口
List<T>实现的接口:IList<T>, IList, IReadOnlyList<T>
其实.net framework经过多代发展,List的接口确实是有点多了,添加新功能时为了兼容老功能,一些旧的接口又不能丢掉,所以看上去有点复杂。先把这些接口捋一下:
IEnumerator是枚举器接口,拥有枚举元素的功能,成员有Current, MoveNext, Reset,这三个函数可以使集合支持遍历。
IEnumerable是支持枚举接口,实现这接口表示支持遍历,成员就是上面的IEnumerator。
ICollection是集合接口,支持着集合的Count属性和CopyTo操作,另外还有同步的属性IsSynchronized(判断是否get='_blank'>线程安全)和SyncRoot(lock的对象)。
IList是集合的操作接口,支持索引器,Add, Remove, Insert, Contains等操作。
泛型部分基本是上面这些接口的泛型实现,不过IList<T>的一些操作放到ICollection<T>里了,可能微软也觉得对于集合的一些操作放到ICollection更合理吧。
IReadOnlyCollection<T>是.net 4.5加进来的,可以认为是IList<T>的只读版。
变量
1 private const int _defaultCapacity = 4; 2 3 private T[] _items; 4 5 private int _size; 6 7 private int _version; 8 9 private Object _syncRoot;10 11 static readonly T[] _emptyArray = new T[0];
原标题:.net源码分析 – ListT
关键词:.NET
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。