我正在开发一个引擎,它可以由用户(不是最终用户,图书馆用户)配置以使用不同的组件。
例如,假设类 Drawer
必须有一个 ITool
, Pencil
或 Brush
, 和一个 IPattern
, Plain
或 Mosaic
.另外,假设一个 Brush
必须有一个 IMaterial
Copper
或 Wood
说一下选择Pencil
的效果或 Brush
确实有很大的不同,IPattern
也是如此类型。编码 Drawer
是不是一个坏主意?像这样的通用概念类:
public class Drawer<Tool, Pattern> where Tool: ITool where Pattern : IPattern { ... }
public class Brush<Material> where Material : IMaterial { ... }
然后可以像这样使用该类:
Drawer<Pencil, Mosaic> FirstDrawer = new Drawer<Pencil, Mosaic>();
Drawer<Brush<Copper>, Mosaic> SecondDrawer = new Drawer<Brush<Copper>, Mosaic>();
我主要将泛型用于集合等,并没有真正看到泛型用于这类事情。我应该吗?
最佳答案
除非您创建的引擎具有带参数的方法或返回类型为泛型类型,否则使用泛型实际上没有任何意义。 IE。你会期望有一个像
这样的属性和方法public <Material> Material { get; }
public void Draw(<Tool> pen);
(我目前处于Java模式,如果错误请更正C#语法!)
从示例中我可以看出,您仅将泛型用于类的构造函数。由于您依赖于实现中的接口(interface),因此使用泛型并没有真正增加值(value)。
也许我错了,但泛型实际上是为了在编译时检查类型安全并避免大量(有风险的)类型转换。
关于c# - 在非类集合类中使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3664747/