を選択:は、抽象クラスを継承 - 私はある抽象クラスを持っているパターン
public abstract class Ingredient
{
private string name;
private decimal price;
public Ingredient(string name, decimal price)
{
this.name = name;
this.price = price;
}
public string Name
{
get
{
return this.name;
}
}
protected decimal Price
{
get
{
return this.price;
}
}
protected void ChangePrice(decimal newPrice)
{
Console.WriteLine(string.Format("The price changed from {0} to {1} for engridient {2}", this.price, newPrice,this.name));
this.price = newPrice;
}
}
そして私は、成分継承食材がたくさんあります。
Tomato:Ingredient {//implementation}
Cheese:Ingredient {//implementation}
Mushrooms:Ingredient {//implementation}
Onion:Ingredient {//implementation}
をしかし、私は私の成分は、いくつかのタイプを持つようにしたいです成分の種類に基づいてdecimal Quantity
またはint Count
とすることができる。例えば、トマトは数えられ(トマト3個)、チーズはdecimal Quantity
(チーズ30g)で測定されます。私は抽象クラス作ってみました:
public abstract class Countable
{
protected abstract int Count { get; set; }
}
public abstract class Qantable
{
protected abstract decimal Quantity { get; set; }
}
をしかし、クラスは2つの基底クラスを持つことはできません(私はTomato:Ingredient, Countable {//implementation}
を持つことはできません)私は私の測定が見えるようにしたいので、私は唯一の子要素のためのインターフェイスを使用しcan`tと。私はあなたのCountable
とQantable
はIngredient
から派生する必要があり、これを達成するための測定(Iは、例えば可算でいくつかの基本ロジックを変更したいときに、私はすべての子供の実装を変更する必要はありません)