抽象类字段冗余C#
我有基本抽象的抽象类字段冗余C#,c#,inheritance,abstract,C#,Inheritance,Abstract,我有基本抽象的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
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);
}
}
我应该写两次商品
类中存在的标题
、条形码
、价格
?我能换这个吗
public Book(string title, string barCode, double price, int numPages)
: base(title, barCode, price)
冗余结构较少?否,此代码不是冗余的。必须将值同时传递给
Book
构造函数和base
构造函数
我看到你在书构造函数中分配权重。如果需要,也可以对其他标题
、条形码
和价格
执行相同的操作。那么您的商品
构造函数将为空。但这意味着Goods
的每个实现都必须这样做(如果有更多的逻辑而不是简单的赋值,这将是一件坏事)
我应该写两次商品类别中存在的标题、条形码和价格吗?
我能换这个吗。。。减少重复建设
此代码中没有“冗余”
这是构造函数[method]的声明,指定它所采用的参数
public Book(string title, string barCode, double price, int numPages)
这是基类构造函数的调用,将参数传递给该构造函数
: base(title, barCode, price)
这是绝对必要的,因为基类只能使用包含三个参数的构造函数构造。您必须提供这些参数,要么是从传递给此构造函数的参数,要么可能是通过派生这些参数,如中所示
: base(title, barCode, priceDerivedFrom( title, barCode ) )
(不确定这样一个函数将如何工作,但希望你明白我的观点) 你的代码不是多余的,你不能让你的构造函数变短。这就是C#sintax的样子,我明白。书籍构造函数从基本商品构造函数继承值作为基础。它们从基本构造函数传递到继承的构造函数。不是每次都填,只是一张便条。您有字段,没有属性。属性应该有<代码>获取<代码> >和/或<代码> SET<代码>。请使用<代码>十进制< /代码>(或整数),而不是<代码>双<代码>来表示价格。我会考虑通过接口替换抽象类。您已经有了一个可接受的答案,但也要考虑:1)您有保护字段。有没有一个好的,伟大的,难以置信的不可避免的原因?2) 抽象类中的公共构造函数?你可能想保护它(只是为了意图,没有其他合理的区别)3)为什么重量是一根绳子?4)您可以考虑只使用一个无参数的构造函数,让调用方逐步地填充对象属性(如果适用)。如果不是,至少你可能想让它们成为只读属性(否则你会遇到无参数的ctor的问题,但没有优势),我用秩替换了权重。我注意到了。这不是我的代码。这不是字符串。此等级用于通过LINQ进行排序。我改了。它可以和字符串一起工作,但我想把它做好。对受保护代码的回答是一样的,是否有4)的具体示例?谢谢。伊夫卡顿。我在另一个答案中理解了,但谢谢你!单词调用。