抽象类字段冗余C#

时间:2016-06-21 07:53:00

标签: c# inheritance abstract

我有基础抽象Goods类并继承了Book类。

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);
    }

}

我应该在title课程中两次写下barCodepriceGoods吗?我可以替换这个

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

没有多余的构造?

2 个答案:

答案 0 :(得分:17)

不,这段代码不是多余的。您必须将值传递给Book构造函数和base构造函数。

我看到您在weight构造函数中分配了Book。如果需要,您也可以对其他TitleBarCodePrice执行相同操作。然后你的Goods构造函数将为空。但这意味着Goods的每个实现都必须这样做(如果有更多逻辑然后简单分配,这将是一件坏事)。

答案 1 :(得分:2)

  

我应该在Goods类中写两次title,barCode,price吗?   我可以用更少的冗余构造来替换它吗?

此代码中有 no “冗余”。

这是构造函数[method]的声明,指定它所采用的参数。

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

这是基类的构造函数的调用,传递传递给 this 构造函数的参数。

    : base(title, barCode, price)

这是绝对必要的,因为您的基类只能使用提供的带有三个参数的构造函数来构造。你来提供这些参数,可以是传递给这个构造函数的参数,也可以是通过派生它们,如

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

(不确定这样的函数函数是如何工作的,但希望你看到我的观点)。