2016-06-21 50 views
14

我有基類摘要Goods類並繼承了Book類。抽象類字段冗餘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); 
    } 

} 

我應該寫titlebarCodeprice存在於Goods類兩次?我可以取代這

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

與較少的重複建設?

+8

只是一個說明。你有**字段**而不是**屬性**。屬性應該有'get'和/或'set'。 –

+6

請使用'decimal'(或整數)而不是'double'來表示價格。 – CodesInChaos

+4

我會考慮用接口來替換抽象類。 – CodesInChaos

回答

17

不,這段代碼不是多餘的。您必須將值傳遞給Book構造函數和base構造函數。

我看到你在Book構造函數中分配了weight。如果你願意,你也可以爲其他Title,BarCodePrice做同樣的事情。然後你的Goods構造函數將是空的。但是,這將意味着Goods各實施將不得不這樣做(這將是一件壞事,如果有更多的邏輯則簡單分配)..

+0

不理解。 – ifooi

+8

你的代碼是不是多餘的,你不能讓你的構造器短。這就是C#sintax的外觀。 –

+0

好的,謝謝,我會了解更多。有getter/setter的例子。 – ifooi

2

我應該寫標題,條形碼,存在價格在商品類兩次? 我可以用更少的冗餘結構來替換這個...嗎?

還有no此代碼中的「冗餘」。

這是您的構造函數[方法]的聲明,指定它需要的參數。

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

這是基類的構造函數的調用,通過傳遞給這個構造函數的參數。

: base(title, barCode, price) 

這是絕對必要的,因爲你的基類可以使用帶有三個參數提供的構造函數構造。您提供這些說法,無論是從傳遞給這個構造函數或參數,可能的話,通過得到它們,如

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

(不知道這樣的功能函數是如何工作的,但是,希望你看我的點)。

+0

謝謝。 Invocaton。我在另一個答案中瞭解,但謝謝你!字調用。 – ifooi