C#中的设计问题:泛型或多态或两者兼而有之?

OKB*_*OKB 1 c# generics polymorphism

我需要一些设计问题的帮助.我试图实现的是:

我有一个名为Document的主类.此类具有属性类列表.这些属性类具有一些常见属性,例如Identity和Name,但它们在我称为Value的一个属性中有所不同.Value类型对于每个不同的Attribute类是不同的,并且类型为string,integer,List,DateTime,float,List以及由多个属性组成的类.一个例子是我将调用PairAttribute的类,它具有2个属性:Title和Description.

我试图实现的是Attribute子类的Value属性的类型安全性,并且这些子类应该能够添加到Document类的Attribute列表中.我本可以只创建一个具有类型为Object的Value属性的Attribute类,并且完成它,但这正是我在这里要避免的.

公共属性(Identity和Name)应放在基类中我猜,我们可以调用那个AttributeBase类.但我希望有一个子类,比如StringAttribute,其中Value属性是string类型,IntegerAttribute类,其中Value属性是Integer类型,StringListAttribute,其中Value属性是List类型,PairAttribute类,其中Value是一个有几个属性等的类

你知道我怎么能实现这个吗?这是我应该采用的解决方案还是解决此类安全问题的更好方法?我会很感激代码示例澄清:)

Dan*_*den 5

您没有指定语言,但术语"泛型"(由Java和C#使用)描述的功能在其他语言(如ML和Haskell)中通常称为" 参数多态 ".相反,Java和C#中" 多态 " 的常见含义实际上更准确地称为" 子类型多态 ".

关键是,无论您使用的是子类型多态还是参数多态,无论您的问题是什么方式都需要多态性,所以我认为您走的是正确的轨道.

问题实际上归结为:参数多态何时比子类型多态更好?答案其实很简单:当它需要你编写更少的代码时.

所以,我建议你对这两种方法进行原型设计,然后看看哪种方法可以更简单,更容易理解代码.然后这样做.