继承抽象类时添加参数



Book类继承了抽象类Goods。Book方法和Goods方法具有相同的参数。但也有numPages,为什么?

公共图书(字符串标题,字符串条形码,双倍价格,int numPages(

如果我有一个类继承了Book类,我是否必须放置所有相同的参数并创建一个新的参数?

public Author(字符串标题,字符串barCode,双倍价格,int 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;
}

如果我有一个类继承了Book类,我是否必须放置所有相同的参数并创建一个新的参数?

不,如果Book类可以在构造函数的开头为Goods类构造函数提供一些值,则不必这样做。

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

除非,除非在子类的构造函数中放入相同的参数。

这是因为

实例构造函数,您可以调用它来创建类的新实例。每个类都必须定义自己的构造函数。

这在Microsoft文档中有解释,子类必须显式或隐式调用基类提供的构造函数之一。

代码中的: base(title, barCode, price)是明确的方式。即使Book类没有构造函数或有一个没有参数的构造函数,也可以采用隐式方式,即省略代码: base()

您可以考虑的另一件事是去掉用于可选字段的构造函数参数。这些字段可以填充为属性。以下代码中的BarCode就是示例。然后,子类不需要有BarCode的代码。

但是阅读本文档,要清楚使用对象初始化器初始化的顺序。在某些情况下,它不可能是等效的,尽管它在所提供的简单代码中并不重要。

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

最新更新