取决于您如何设置当前对象;我会创建 2 个 Paint 类。第一个 Paint 类采用paint 中的所有常见属性/字段。然后我会创建第二个类,我们称之为 PaintSpecialize。 PaintSpecialize 将继承自 Paint(为此类提供所有 Paint 的属性和方法)。然后,在 PaintSpecialize 中,您可以将 Formula 属性添加到类中。之后,这只是铸造对象的问题。
C# 示例:
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。
因此,如果客户想要常规绘画,请创建一个 Paint 对象,如果他想要自定义绘画,请创建一个 PaintSpecialize。如果客户想要一种常规和定制的油漆,请创建每种油漆。将它们都称为 Paint,直到您需要使用 PaintSpecialize 类中的某些内容。
请注意,应在基类中设置 AllowsCustomColorMatch 属性,否则您可能需要更加努力地确定该类是否属于 PaintSpecialize 类型。