class NewList<T> : List<T>
为什么我无法访问T[] _items
之类的内部结构?
为什么他们不受保护,而是私人?
我应该使用合成吗?
答案 0 :(得分:7)
他们是私密的,因为作者(微软)并不打算让您访问它们,可能出于安全原因。
您应该使用合成而不是继承。让您的课程直接展示IList<T>
而不是List<T>
。
List<T>
(这实际上是在设计指南中指定的)。它应仅用作内部实现细节。
答案 1 :(得分:2)
List<T>
并非设计为基类。您应该使用System.Collections.ObjectModel中的一个类来代替。
答案 2 :(得分:1)
为什么我无法访问它的内部结构 T [] _items等?
Reflector说_items是私有的。下划线表明私人成员
为什么他们不受保护,但是 私人?
对于_items,Microsoft提供了公共ToArray方法。它返回_items。
答案 3 :(得分:1)
根据设计,暴露成员只有在(绝对)必要时才能完成,让对象始终保持正确的状态。并且将字段(_items)公开为受保护属性并不是一个好主意,这需要受保护的属性。在这种情况下,已经存在公共财产(this [])
组合将为您提供更少的访问权限 - 也没有受保护的成员。
答案 4 :(得分:0)
你不需要它。也就是说,使用_items
对Item : T
属性无法做什么可以做什么?他们使用索引器为底层数组提供了一个简单的功能抽象。它的重量非常轻 - 只需检查边界并增加列表的版本(在设置器上)......
var lst = new List<int>() { 1, 2, 3, 4, 5 };
lst[0].Dump(); // 1
lst.Dump(); // 1, 2, 3, 4, 5
lst[0] = 2;
lst.Dump(); // 2, 2, 3, 4, 5