2016-06-30 42 views
-1

我有多個類有一個共同的屬性,我在該類的構造函數中設置該屬性。類設計 - 繼承或抽象或接口

class Expense1 
{ 
    int _costval; 

    public Expense1(int cost) 
     { 
      _costval = cost; 
     } 

    ///other properties and methods.. 
} 
class Expense2 
{ 
    int _costval; 

    public Expense2(int cost) 
     { 
      _costval = cost; 
     } 

    ///other properties and methods... 
} 
class Expense3 
{ 
    public int _costval; 

    public Expense3(int cost) 
     { 
      _costval = cost; 
     } 

    ///other properties and methods... 
} 

在某些時候我需要訪問「_costval」。像

Console.WriteLine(@object._costVal) 

該對象可以是任何類型expense1或expense2或expense3的..

我該怎麼辦呢?我應該創建基本的抽象類並將costval和構造函數移動到它嗎?請指教。

+4

我看不到任何財產只是一個(有時)公共領域 –

回答

1

您可以通過接口或基類實現相同的功能。但是,開發接口將導致更好的設計,因爲它將鬆散耦合,並且不會受到brittle base class的影響。身高:composition over inheritance

所以:

public interface ICostable 
{ 
    int Cost { get; } 
} 

class Expense1 : ICostable 
{ 
    public int Cost { get; } 

    public Expense1(int cost) 
     { 
      Cost = cost; 
     } 

    ///other properties and methods.. 
} 

然後,你可以這樣做:

public void PrintCost(ICostable item) 
{ 
    Console.WriteLine(item.Cost); 
} 
+0

有意義。謝謝 – bansi