2016-06-21 14 views
14

mam baza abstrakcyjne Goods klasę i dziedziczone Book klasę.Streszczenie pola redundancję klasy C#

abstract class Goods 
{ 
    public decimal weight; 
    string Title, BarCode; 
    double Price; 
    public Goods(string title, string barCode, double price) 
    { 
     Title = title; 
     BarCode = barCode; 
     Price = price; 
    } 
} 

abstract class Book : Goods 
{ 
    protected int NumPages; 
    public Book(string title, string barCode, double price, int numPages) 
     : base(title, barCode, price) 
    { 
     NumPages = numPages; 
     weight = 1; 
    } 
    public override void display() 
    { 
     base.display(); 
     Console.WriteLine("Page Numbers:{0}", NumPages); 
    } 

} 

powinienem napisać title, barCode, price które istnieją w klasie Goods dwukrotnie? Czy mogę zastąpić tę nową, mniej redundantną konstrukcję?

+8

Tylko uwaga. Masz ** pola ** i nie ** właściwości **. Właściwości powinny mieć 'get' i/lub' set'. –

+6

Proszę używać "dziesiętnej" (lub liczb całkowitych) zamiast "podwójnego" do reprezentowania cen. – CodesInChaos

+4

Zastanowiłbym się, czy zastąpić klasę abstrakcyjną interfejsem. – CodesInChaos

Odpowiedz

17

Nie, ten kod nie jest zbędny. Musisz przekazać wartości zarówno konstruktorowi Book, jak i konstruktorowi base.

widzę przypisać weight w Book konstruktora. Jeśli chcesz, możesz zrobić to samo dla innych Title, BarCode i Price również. Wtedy twój konstruktor Goods będzie pusty. Ale to oznaczałoby, że każda realizacja Goods miałby to zrobić (co byłoby złe, jeśli jest więcej logiki następnie przypisać proste) ..

+0

Nie rozumiem. – ifooi

+8

Twój kod nie jest zbędny i nie można go skrócić. Tak wygląda wygląd C# sintax. –

+0

OK, dzięki, chciałbym dowiedzieć się więcej. Przykłady z programem pobierającym/ustawiającym. – ifooi

2

powinienem napisać tytuł, kod kreskowy, cena, które istnieją w Klasa towarów dwa razy? Czy mogę zastąpić to ... mniej nadmiarową konstrukcją?

W tym kodzie jest no "nadmiarowość".

To jest deklaracja konstruktora [metoda], podając argumenty, które trwa.

public Book(string title, string barCode, double price, int numPages) 

Jest to wezwanie do konstruktora klasy bazowej, przekazując argumenty przekazywane do to konstruktora.

: base(title, barCode, price) 

Jest to absolutnie konieczne, ponieważ klasa bazowa może tylko być konstruowane przy użyciu konstruktora pod warunkiem, że przyjmuje trzy argumenty. masz dostarczyć te argumenty, albo z argumentów przekazanych do tego konstruktora lub ewentualnie przez nich wynikające, jak w

: base(title, barCode, priceDerivedFrom(title, barCode)) 

(Nie wiem, jak taka funkcja funkcja będzie działać, ale miejmy nadzieję, że widzisz mój punkt).

+0

Dzięki. Invocaton. Zrozumiałem w innej odpowiedzi, ale dziękuję! Inwokacja słowa. – ifooi

Powiązane problemy