2016-06-21 42 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