这就是我试图找到一个合适的设计的情况。
我需要存储号码的配置文件。个人资料只是一系列的数字。它们可以是int、float或decimal类型。每个配置文件都有一个基于枚举的ProfileDescription字段。
每个配置文件都有一个ProfileVersion对象集合。每个ProfileVersion对象都有一个ProfileValue对象集合。这些ProfileValue对象是所需类型的实际数值的存储位置。
我最初的设计想法是让Profile、ProfileVersion和ProfileValue成为通用的。当我想要一个不同类型的配置文件列表时,我遇到了一个问题,但我不能拥有。我可以使用ArrayList代替,但这样我就必须转换其中的数据。
我认为可以只使ProfileVersion和ProfileValue泛型,然后让Profile对象根据ProfileVersion字段的值为ProfileDescription分配一个类型,但我找不到这样做的方法。
另一个想法是我应该使用一个ProfileBase类,然后用GenericProfileClass或IntProfile、FloatProfile和DecimalProfile对它进行子类化,但这并不会给我带来比每个类都是泛型类更多的优势,因为我每次都必须逐出子类。
对于这种情况,我将非常感谢您对最佳设计方法的看法。
谢谢
发布于 2009-03-17 10:52:52
Grzenio的想法是正确的。您的每个配置文件类都可以成为IProfile对象的实现,然后您的容器可以是:
class ProfileList : IList<T> where T: IProfile因此,您将拥有的唯一约束是接口,而不是特定的类型或强制转换的基类。
至于:
另一个想法是,我应该使用ProfileBase类,然后用GenericProfileClass或IntProfile、FloatProfile和DecimalProfile对它进行子类化,但这并不会给我带来比每个类都是泛型类更多的优势,因为我每次都必须逐出子类。
好处实际上取决于您为您的类所做的抽象级别。如果设计得当,理想情况下您可以拥有操作/业务逻辑/或管理器类,这些类可以接受这些基类型中的任何一个(同样是通过泛型),而不必知道具体的类型转换。
发布于 2009-03-17 10:43:28
我不确定我是否正确理解了您的问题(粘贴不起作用的代码会有所帮助),但我认为您可以尝试创建接口IProfile、IProfileVersion等,并使泛型类继承接口Profile<T>:IProfile。
无论如何,你要做的并不容易,因为不幸的是,C#中没有基本的数字类型。
https://stackoverflow.com/questions/653698
复制相似问题