Book类继承了Goods抽象类。 Book方法的参数与Goods方法的参数相同。但是还有numPages,为什么?
公共书(字符串标题,字符串条形码,双倍价格,整数numPages)
如果我有一个继承Book类的类,是否必须将所有相同的参数都放入一个新的参数中?
公共作者(字符串标题,字符串条形码,双倍价格,整数numPages,字符串作者)
我希望这有道理。
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;
}
答案 0 :(得分:0)
如果我有一个继承Book类的类,是否必须将所有相同的参数都放入一个新的参数中?
否,如果Book类可以在构造函数的开头为Goods类构造函数提供一些值,则不必这样做。
public Book(string title, double price, int numPages)
: base(title, price, 100) {
除非将相同的参数放在子类的构造函数中,否则别无选择。
这是因为
{p>(在Microsoft doc中有解释),子类必须显式或隐式调用基类提供的构造函数之一。 代码中的实例构造函数,您可以调用它们来创建类的新实例。每个类都必须定义自己的构造函数。
: base(title, barCode, price)
是显式方式。即使Book类没有构造函数或没有参数的构造函数,也可以采用隐式方式,其中可以省略代码: base()
。
您可以考虑的另一件事是摆脱用于可选字段的构造函数参数。可以将此类字段填充为属性。以下代码中的BarCode
是示例。然后,子类不需要具有BarCode
的代码。
但是请阅读this doc,请充分了解对象初始化程序的初始化顺序。在某些情况下,虽然在所提供的简单代码中没关系,但这不是等效的。
abstract class Goods {
public decimal weight;
string Title, GoodsType;
public string BarCode { get; set; }
double Price;
public Goods(string title, double price) {
Title = title;
GoodsType = goodsType;
Price = price;
}
}
class Book : Goods {
protected int NumPages;
public Book(string title, double price, int numPages)
: base(title, price) {
NumPages = numPages;
weight = 1;
}
}