根据你当前的对象设置,我会创建2个Paint类,第一个Paint类获得所有的常见属性/字段然后创建第二个类,我们称之为PaintSpecialize,PaintSpecialize将继承Paint(给这个类所有Paint的属性和方法),然后在PaintSpecialize中添加Formula属性到类中,之后,这只是铸造物体的问题。 C#ex:
public class Paint {
private decimal _price;
private bool _allowFormula;
public Paint() { ... }
public Paint(int price) {
_price = price;
}
public ChangePrice(decimal p) {
_price = p;
}
}
等等。
PaintSpecialize会是这个样子:
public class PaintSpecialize : Paint {
string _formula;
[...]
public PaintSpecialize(int price, string formula) : base(price) {
_formula=formula;
}
后的代码有可能:
PaintSpecialize ps = new PaintSpecialize(15.00, "FormulaXXYY");
ps.ChangePrice(12.00);
List<Paint> plist = new List<Paint>();
plist.Add((Paint)ps);
foreach(Paint p in plist) {
if(p.AllowFormula) {
PaintSpecialize tmp = (PaintSpecialize)p;
MessageBox.Show(tmp._formula);
}
上面的代码给出了一个简单的(不是很完整),看看你能做些什么与油漆。该列表现在可以同时包含Paint和PaintSpecialize,只要后者能够正确输出。您可以在任何时候简单地操作列表中的PaintSpecialize,方法是将其形成一个简单的Paint到PaintSpecialize。
所以如果客户想要定期绘画,创建一个绘画对象,如果他想要一个自定义绘画,创建一个PaintSpecialize。如果客户想要定期和定制油漆,请创建其中一个。直到你需要使用PaintSpecialize类中的某些东西时,将它们都称为Paint。
请注意,AllowsCustomColorMatch属性应该在基类中设置,否则您可能必须更加努力地弄清楚该类是否为PaintSpecialize类型。
我同意雨果。 – 2009-06-08 21:56:26