【发布时间】:2010-01-16 01:36:43
【问题描述】:
这是我的问题的抽象和简化:
我有一套玩具和这些玩具的相应盒子。我希望用户能够指定盒子可以容纳的最大玩具类型:
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 中。然后我希望能够将盒子添加在一起,返回一个具有最大类型的盒子。
我真的不知道如何开始。具有多种类型的泛型类的列表真的让我陷入了循环。我阅读了有关使用抽象类或接口的各种文章,但没有找到一个示例或任何可以完成类似于我正在尝试做的事情的东西。
任何人都可以提供任何帮助,我们将不胜感激。
解决方案可以在 C# 4.0 中。
未来可能的澄清:
我希望 Toy 是通用的并在实例化时接受参数,因为 Toy 还必须有一个 List 作为成员。
Toy 中的嵌套列表是我的主要问题。然后我想要一个 Box 中包含玩具的列表,但每个玩具都有不同类型的构造函数。
更新:
我将 Box to Box 修复为一个错字。
更新 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
Final:我最终取消了 Box 是通用的要求。然后我使用反射来创建动态类型的玩具。谢谢大家。
【问题讨论】:
-
公开名单
= new List ();公共列表 = 新列表 ();这些不会编译,变量名被遗漏了。 “玩具也必须有一个列表作为成员。” :这个列表中有什么,它的目的是什么?建议您重新编写问题描述以更清楚地表达您的目标和意图:也许区分一个拥有一个和只有一个玩具的“ToyBox”和一个拥有一个或多个“ToyBox 对象的 BoxOfToys”? -
我同意 BillW 关于列表问题的观点,并要求进一步澄清 Toy 实际添加到泛型类型中的内容。 “Ball”和“Horse”对我来说已经像是玩具了,那么“Toy
”或“Toy ”是什么? Horse 和 Ball 有共同的基类吗?