2017-03-24 24 views
2

を選択:は、抽象クラスを継承 - 私はある抽象クラスを持っているパターン

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と。私はあなたのCountableQantableIngredientから派生する必要があり、これを達成するための測定(Iは、例えば可算でいくつかの基本ロジックを変更したいときに、私はすべての子供の実装を変更する必要はありません)

答えて

6

をカプセル化します。

public abstract class Countable : Ingredient 
{ 
    protected abstract int Count { get; set; } 
} 

public abstract class Qantable : Ingredient 
{ 
    protected abstract decimal Quantity { get; set; } 
} 

のでCountableまたはQantableから派生するクラスは、あまりにも、Ingredientになります。

関連する問題