Почему класс X может наследоваться от Collection <X> - PullRequest
0 голосов
/ 17 мая 2018

Я просто смотрел на реализацию классов, таких как 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>)

Я не могу представить, где это было бы необходимо, так почему это не отображает ошибку.

Я понимаю, что, вероятно, смотрю на это с неправильной точки зрения и использую это совершенно неправильно. Но я не мог найти много ресурсов, и ни один из них, казалось, не помог.

Может ли кто-нибудь привести примеры того, почему это было бы полезно / допустимо?

Спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

Не заворачивай голову таким уродам.Это не дает особой пользы и не проясняет ваше намерение.Действительно, лучше разделить class A и class ACollection : ICollection<A> по многим, многим, многим причинам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...