2016-06-30 36 views
-1

Ich habe mehrere Klassen mit einer gemeinsamen Eigenschaft und ich setze diese Eigenschaft im Konstruktor dieser Klasse.Klassenentwurf - Vererbung oder Zusammenfassung oder Schnittstelle

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... 
} 

an einem gewissen Punkt muss ich "_costval" zuzugreifen. so etwas wie

Console.WriteLine(@object._costVal) 

Diese Aufgabe jeglicher Art Aufwendungen1 oder expense2 oder expense3 sein kann ..

wie kann ich das tun? Soll ich eine abstrakte Basisklasse erstellen und costval und den Konstruktor dorthin verschieben? bitte Beratung.

+4

ich keine Eigenschaft sehen kann nur ein (manchmal) öffentlichen Bereich –

Antwort

1

Sie können das gleiche mit Schnittstelle oder Basisklasse erreichen. Die Entwicklung von Schnittstellen führt jedoch zu einem besseren Design, da es lose gekoppelt ist und nicht unter brittle base class leidet. So bevorzugen 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.. 
} 

Dann können Sie tun:

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

sinnvoll. Vielen Dank – bansi