C# спагетти из списков: оперативная память и производительность

197
08 октября 2018, 01:30

Допустим есть 3 разных класса, A (родительский) и два наследника B и C.

public class A { ... };
public class B : A { ... };
public class C : A { ... };

Это упрощенная схема, иерархия может быть и сложнее, у B и C могут быть наследники и.т.д. И вопрос в следующем, как лучше всего архитектурно подойти к решению по работе со списками в которых могут фигурировать классы из этой иерархии.

Например, есть списки и метод который добавляет класс B и класс C в список, и соответственно под каждый отдельный список + общий список для A. Выглядит это так:

public List<A> AList = new List<A>();
public List<B> BList = new List<B>();
public List<C> CList = new List<C>();
public void Add_B(B obj) {
    AList.Add(obj);
    BList.Add(obj);
}
public void Add_C(C obj) {
    AList.Add(obj);
    CList.Add(obj);
}

Является ли это вообще корректным решением? Чем больше классов задействуется в иерархии, тем сильнее это превращается в спагетти из списков, еще и давит на оперативку, но в каком то смысле проще работать с нужными классами. С другой стороны рассматривается вариант добавлять только в AList, и с помощью "is" определять нужный тип и работать с ним, но влияет ли это на производительность? Какие еще есть варианты для построения работы с массивами объектов-родителей-наследников с которыми работа может быть по отдельности или со всеми сразу?

READ ALSO
Изменение иконки в TreeViewItem

Изменение иконки в TreeViewItem

Имеется обычный TreeViewПри нажатии правой кнопкой мыши по treeviewitem вылезает меню (добавляет/удаляет запись в/из коллекции)

215
Как подключить кортежи для C# в MVS17?

Как подключить кортежи для C# в MVS17?

Как подключить кортежи для C# в Visual Studio 17?

184
Чтение файла из архива без распаковки в C#

Чтение файла из архива без распаковки в C#

Мне необходимо читать текстовый файл, что находится в архиве построчноРаспаковывать его на жесткий диск нельзя

214
Обрезка изображения по кругу

Обрезка изображения по кругу

Необходимо реализовать обрезку изображения по кругу с выбором области обрезки по типу, как это сделано, например, тут либо другой способ...

192