pis*_*hio 41 c# collections inheritance list
实现继承自的新类的最快方法是什么List<T>?
class Animal {}
class Animals : List<Animal> {} // (1)
Run Code Online (Sandbox Code Playgroud)
我遇到的一个问题:通过简单地做(1),我发现我没有从继承任何构造函数中获益List<T>.
最后,我想Animals表现得很像List<T>(例如,可以构建,与Linq的兼容性).但另外,我还希望能够添加自己的自定义方法.
Joã*_*elo 48
如果你想创建一个公开暴露的动物集合,你不应该继承List<T>,而是继承Collection<T>并使用Collection类名中的后缀.示例:AnimalCollection : Collection<Animal>.
这得到框架设计指南的支持,更具体地说:
不要使用
ArrayList,List<T>,Hashtable,或Dictionary<K,V>在公共API.使用Collection<T>,ReadOnlyCollection<T>,KeyedCollection<K,T>,或CollectionBase的亚型代替.请注意,通用集合仅在Framework 2.0及更高版本中受支持.
And*_*mes 25
构造函数不会与类一起继承.你必须重新实现你想要的构造函数.
public class AnimalsCollection : List<Animal>
{
public AnimalsCollection(IEnumerable<Animal> animals) : base(animals) {}
}
Run Code Online (Sandbox Code Playgroud)
Eup*_*ric 12
List<T>不建议派生.主要是因为List从来没有用于扩展,而是用于性能.
如果要创建自己的特定集合,则应继承Collection<T>.在你的情况下,它将是:
class Animals : Collection<Animal> {}
Run Code Online (Sandbox Code Playgroud)
请记住,从List继承并不像您可能需要的那样功能齐全,很多成员都不是虚拟的,因此覆盖基本实现的唯一方法是用new语法(而不是override)来遮蔽它.
如果您需要开始在标准列表操作上公开自定义行为,我将在一个类型上实现所有列表接口,该类型仅使用实际存储的内部列表.
这在很大程度上取决于您的最终要求.
| 归档时间: |
|
| 查看次数: |
34189 次 |
| 最近记录: |