Если бы у меня был класс, унаследованный от класса Book, нужно ли мне ставить все те же параметры и создавать новый?
Нет, нет необходимости, если класс Book может предоставить некоторые значения для конструктора класса Goods в начале конструктора.
public Book(string title, double price, int numPages)
: base(title, price, 100) {
Если нет другого способа, кроме как поместить те же параметры в конструктор подкласса.
Это потому что
Конструкторы экземпляров, которые вы вызываете для создания нового экземпляра класса. Каждый класс должен определять свои собственные конструкторы.
, что объясняется в Microsoft doc , и подкласс должен вызывать один из конструкторов, предоставленных базовым классом явно или неявно.
: 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;
}
}