我只是在研究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>
)
我无法想象这是必要的,所以为什么不显示错误。
我意识到我可能从错误的角度看这个,并且完全错误地使用它。但是,我找不到很多资源,但似乎没有任何资源可以提供帮助。
有人可以举例说明为什么这会有用/允许吗?
感谢。
答案 0 :(得分:1)
不要把头包裹在这样的怪人身边。它没有那么多用处,也没有让你的意图更清晰。实际上,最好将class A
和class ACollection : ICollection<A>
分开,原因很多很多很多。