继承自.NET中的List <t>(vb或C#)</t>

时间:2011-03-05 23:16:31

标签: .net inheritance collections

我已经在C ++世界中钻研了一段时间,但现在我再次进入.NET世界,VB和C#,我想知道你是否有一个代表某种东西的类,你想要能够使用它这在foreach循环中等等......是自己实现IEnumerableIEnumerator更好还是从List<T>继承,其中T是对象类型的单数形式?< / p>

我知道在C ++中,从容器继承被认为是个坏主意。

但是.NET呢。

编辑:

似乎我的问题有点被误解了。我对.NET中的现有集合并不感到不满。这是我的问题,我有一个名为'Person'的课程,我需要一个名为'Scouts'的集合,我想在一个名为'Scouts'的课程中,此时我希望能写出来

foreach Person in Scouts ...

将此Scouts作为People的集合,并能够在foreach循环中使用它的最佳方法是什么?

4 个答案:

答案 0 :(得分:3)

你说:

  

我有一个名为'人'的班级和我   需要一个名为'Scouts'的集合,   我想要在一个叫做的类中   “侦察兵”,此时我想成为   能够写

     

foreach Person in Scouts ...

如果我理解正确,你想要:

class Scouts : IEnumerable<Person>
{
    private List<Person> scouts;

    public IEnumerator<Person> GetEnumerator()
    {
        return scouts.GetEnumerator();
    }
}

答案 1 :(得分:1)

在.NET中,很少实现IEnumerable<T>或派生自List<T>。如果您需要带有索引器的动态长度集合,则可以直接使用List<T>,如果需要固定长度集合,则可以使用数组T[]System.Collections.Generic命名空间包含大多数通用集合类。

答案 2 :(得分:1)

真正的问题是,你为什么要实施自己的“收藏品”?也就是说,为什么你对现有的藏品不满意呢?

一旦你回答了这个问题(并且仍然确定你想要这样做),你最好继承System.Collections.ObjectModel命名空间中的一个集合 - 即Collection<T>,{{ 1}}或KeyedCollection<T>,具体取决于您的特定需求。

答案 3 :(得分:0)

托尼,像往常一样'这取决于'。 IEnumerable和IList之间的基本区别是能够添加和排序到IList。

正如Darin所说,直接使用类而不是实现接口更为常见。