【发布时间】:2016-10-22 15:43:58
【问题描述】:
我有基本抽象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);
}
}
我应该写两次存在于Goods 类中的title、barCode、price 吗?这个可以换吗
public Book(string title, string barCode, double price, int numPages)
: base(title, barCode, price)
重复建设少?
【问题讨论】:
-
只是一个注释。你有 fields 而不是 properties。属性应该有
get和/或set。 -
请使用
decimal(或整数)而不是double来表示价格。 -
我会考虑用接口替换抽象类。
-
您已经有一个接受的答案,但还要考虑:1)您有受保护的字段。有没有一个好的、伟大的、难以置信的不可避免的理由? 2)抽象类中的公共构造函数?你可能想让它受到保护(只是为了意图,没有其他合理的区别) 3)为什么重量是一个字符串? 4)您可以考虑只使用一个无参数构造函数,并让调用者逐步填充对象 PROPERTIES(如果适用)。如果不是,至少您可能希望将它们设为只读属性(否则您将遇到无参数 ctor 的相同问题,但没有优势)
-
我用排名代替了体重。我注意到了。这不是我的代码。这不是字符串。此等级用于通过 LINQ 进行排序。我改变了它。它可以与字符串一起使用,但我想把它做好。对受保护代码的回答相同,4) 是否有一些具体示例?
标签: c# inheritance abstract