我有基础抽象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
课程中两次写下barCode
,price
,Goods
吗?我可以替换这个
public Book(string title, string barCode, double price, int numPages)
: base(title, barCode, price)
没有多余的构造?
答案 0 :(得分:17)
不,这段代码不是多余的。您必须将值传递给Book
构造函数和base
构造函数。
我看到您在weight
构造函数中分配了Book
。如果需要,您也可以对其他Title
,BarCode
和Price
执行相同操作。然后你的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 ) )
(不确定这样的函数函数是如何工作的,但希望你看到我的观点)。