Я просто смотрел на реализацию классов, таких как JToken
, и заметил, что она наследуется от List<JToken>
Я никогда раньше не видел, чтобы класс наследовал форму списка, поэтому после прочтения «Ави Тернерс» ответил на этот вопрос: Почему и когда наследовать от Коллекции Я вроде понял. Я мог бы понять, что было бы неплохо сделать класс коллекцией и переопределить методы для 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>
)
Я не могу представить, где это было бы необходимо, так почему это не отображает ошибку.
Я понимаю, что, вероятно, смотрю на это с неправильной точки зрения и использую это совершенно неправильно. Но я не мог найти много ресурсов, и ни один из них, казалось, не помог.
Может ли кто-нибудь привести примеры того, почему это было бы полезно / допустимо?
Спасибо.