抽象类字段冗余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)的具体示例?谢谢。伊夫卡顿。我在另一个答案中理解了,但谢谢你!单词调用。