Вот абстракция и упрощение моей проблемы:
У меня есть набор игрушек и соответствующая коробка для этих игрушек. Я хочу, чтобы пользователь мог указать самый большой тип игрушек, который может содержать ящик:
public class Box<T> {}
то в классе Box я хочу иметь общий список игрушек, но каждая игрушка, содержащаяся в ящике, будет иметь общий тип:
public class Box<T>
{
public List<Toy> = new List<Toy>();
public bool Whatever;
[member functions, constructors...]
[The member functions will depend on T]
}
Класс Toys будет выглядеть следующим образом:
public class Toy<T> where T : struct //T is any type
{
public List<T> = new List<T>();
public string Name;
public string Color;
[member functions, constructors...]
}
Я хочу иметь возможность создавать Игрушки со многими различными типами, а затем вставлять их в Коробку с другим указанным типом. Затем я хотел бы иметь возможность добавлять ящики вместе, возвращая Box с самым большим типом.
Я действительно не знаю, с чего начать. Список родового класса с несколькими типами действительно бросает меня на цикл. Я читал различные статьи об использовании абстрактного класса или интерфейса, но не нашел примера или чего-либо, что бы делало что-то похожее на то, что я пытаюсь сделать.
Любая помощь, которую любой может предоставить, будет очень оценена.
Решение может быть в С# 4.0.
Возможное уточнение будущего:
Я хочу, чтобы Toy была общей и принимала аргумент при создании экземпляра, потому что Toy также должен иметь список как член.
Вложенный список внутри игрушки - моя главная проблема. Затем я хочу, чтобы список внутри Box содержал Toys, но каждая игрушка имеет конструктор разного типа.
Обновление:
Я установил коробку в коробку, которая была опечаткой.
Обновление 2:
Toy<plastic> tyPlastic = new Toy<plastic>("Name1", Blue, new plastic[] {0xFFEE00, 0xF34684, 0xAA35B2});
Toy<wood> tyWood = new Toy<wood>("Name2", Grain, new wood[] {a1, f4, h7});
Box<plastic> bxBox = new Box<plastic>();//The Box has the ability to hold both plastic and wood toys. Plastic > Wood > Paper
Финал: я закончил удаление требования к Box, чтобы он был общим. Затем я использовал отражение для создания динамически типизированной игрушки. Спасибо всем.