В зависимости от того, какие у вас текущие настройки объектов; Я бы создал 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.
Так что, если клиент хочет обычную рисование, создайте объект Paint, если он хочет пользовательскую рисование, создайте PaintSpecialize. Если клиент хочет обычную и нестандартную краску, создайте одну из них. Обращайтесь к ним обоим как к Paint, пока вам не понадобится что-то из класса PaintSpecialize.
Обратите внимание, что атрибут AllowsCustomColorMatch должен быть установлен в базовом классе, иначе вам, вероятно, придется потрудиться, чтобы выяснить, относится ли класс к типу PaintSpecialize.