C# OO泛型设计注意事项
以下是我正在努力寻找合适设计的情况 我需要存储数字的配置文件。个人资料只是一系列数字。它们可以是int、float或decimal类型。每个配置文件都有一个基于ennumeration的ProfileDescription字段 每个概要文件都有一个ProfileVersion对象的集合。每个ProfileVersion对象都有一个ProfileValue对象的集合。这些ProfileValue对象是存储所需类型的实际数值的位置 我最初的设计思想是使Profile、ProfileVersion和ProfileValue通用。我遇到了一个问题,当我想有一个不同类型的配置文件列表,我不能有。我可以改用ArrayList,但这样我就必须抛出其中的数据 我认为可以只将ProfileVersion和ProfileValue设置为泛型,然后让Profile对象根据ProfileDescription字段的值为ProfileVersion指定一个类型,但我找不到这样做的方法 另一个想法是,我应该使用ProfileBase类,然后使用GenericProfileClass或IntProfile、FloatProfile和DecimalProfile对其进行子类化,但这并没有给我带来任何比每个类都是泛型的优势,因为我每次都必须抛出子类 我将非常感谢您对这种情况下的最佳设计方法的想法C# OO泛型设计注意事项,c#,generics,oop,C#,Generics,Oop,以下是我正在努力寻找合适设计的情况 我需要存储数字的配置文件。个人资料只是一系列数字。它们可以是int、float或decimal类型。每个配置文件都有一个基于ennumeration的ProfileDescription字段 每个概要文件都有一个ProfileVersion对象的集合。每个ProfileVersion对象都有一个ProfileValue对象的集合。这些ProfileValue对象是存储所需类型的实际数值的位置 我最初的设计思想是使Profile、ProfileVersion和P
谢谢我不确定是否正确理解了您的问题(粘贴不起作用的代码会有所帮助),但我认为您可以尝试创建接口
IProfile
,IProfileVersion
等,并使泛型类继承接口概要文件:IProfile
无论如何,你想用C语言做的事情并不容易,因为C语言中没有基本的数字类型,很遗憾。Grzenio的想法是正确的。您的每个概要文件类都可以成为
IProfile
对象的实现,然后您的容器可以是:
class ProfileList : IList<T> where T: IProfile
class ProfileList:IList其中T:IProfile
因此,您将拥有的唯一约束是接口,而不是特定类型或铸造基类
至于:
另一个想法是我应该使用
ProfileBase类,然后将其子类化
使用GenericProfileClass或
IntProfile、FloatProfile和
DecimalProfile,但这不会
真的比我有优势吗
每个类都是泛型的,就像我
将不得不抛出子类
反正每次都是
好处实际上取决于您为类所做的抽象级别。如果设计得当,理想情况下,您可以拥有操作/业务逻辑/或管理器类,这些类可以接受这些基本类型中的任何一种(同样是通过泛型),而无需知道具体的强制转换