c # наследование коллекции - PullRequest
2 голосов
/ 02 декабря 2011

Существует ли в c # коллекция, которая поддерживает концепцию наследования, которую могут иметь объекты, включающие в себя все элементы как другого, так и самих себя?

Например:

HashSet<animal> animals = new HashSet<animal>();
HashSet<dog> dogs = new HashSet<dog>();
animals.also_appears_to_include(dogs);

Так, если бы я, например, добавил 2 элемента к собакам и 1 к животным, то посмотрел, сколько элементов у животных я бы увидел 3.

В качестве альтернативы я мог бы поместить ссылки на вышеупомянутые 3 элемента в каждом, даваяживотные 3 элемента и собаки 2. У меня все еще были бы два отдельных, перекрывающихся списка, что желательно, однако добавление и удаление элементов могло бы стать сложным, в этом простом примере добавление или удаление из обеих коллекций в случае добавления и удалениясобак.

Или я мог бы реализовать свою собственную коллекцию с этой функциональностью.

Ответы [ 3 ]

5 голосов
/ 02 декабря 2011

MS не предоставляет ничего, что могло бы обеспечить вашу функциональность, однако

Вы можете просто сохранить набор животных и использовать linq, чтобы отфильтровать его на лету:

var animals = new HashSet<Animal>();
var dogs = animals.OfType<Dog>();
2 голосов
/ 02 декабря 2011

Пусть собаки и кошки наследуют от интерфейса и создают HashSet's интерфейса вместо классов.Или используйте базовый класс.

, например:

HashSet<IAnimal>
0 голосов
/ 02 декабря 2011

Это не так сложно

// Adding 
Animals.Add( animal );
if( animal is dog )
    Dogs.Add( animal );

//Removing 
Dogs.Remove( animal );
Animals.Remove( animal );
...