为什么类X可以继承自Collection <x>

时间:2018-05-17 14:22:38

标签: c# recursion collections

我只是在研究JToken等类的实现,我注意到它继承自List<JToken>

我从来没有见过一个类继续从列表中继承之后读取&#34; Avi Turners&#34;回答这个问题:Why and when to inherit from Collection<T>我有点理解。我可以理解,让一个类成为集合并覆盖Collection的方法,为它们提供自己的实现可能会很好。

所以我创建了一些虚拟类来尝试理解.net将允许我做什么。所以我写道:

    public class A : Collection<A>
    {
        public int @Integer { get; set; }
        public string @String { get; set; }

        public void Remove(int index)
        {
            RemoveItem(index);
        }

        protected override void RemoveItem(int index)
        {

        }
    }

    public class B
    {
        public B()
        {
            var a = new A
            {
                new A(),
                new A()
            };

            a.Integer = 1;
            a.String = "";

            var firstItem = a[1];

            a.Remove(2);
        }
    }

这证实它允许继承自己的列表。我不明白。为什么我可以让A成为可以分配属性的类,而A也是一个列表,我可以在其中添加A的元素(其中这些新实例也可以是列表或只是一个集合)。

不应该有一个只有一个类的A类,而另一个类是一个集合(例如public class ACollection: Collection<A>

我无法想象这是必要的,所以为什么不显示错误。

我意识到我可能从错误的角度看这个,并且完全错误地使用它。但是,我找不到很多资源,但似乎没有任何资源可以提供帮助。

有人可以举例说明为什么这会有用/允许吗?

感谢。

1 个答案:

答案 0 :(得分:1)

不要把头包裹在这样的怪人身边。它没有那么多用处,也没有让你的意图更清晰。实际上,最好将class Aclass ACollection : ICollection<A>分开,原因很多很多很多。