use*_*490 35 inheritance c#-4.0
似乎我得到一个错误,指出"产品不包含带0参数的构造函数
public class Products
{
    string id;
    string name;
    double price;
    int soldCount;
    int stockCount;
    public Products(string id, string name, double price, 
                      int soldCount, int stockCount, double tax)
    {
        this.id = id;
        this.name = name;
        this.price = price;
        this.soldCount = soldCount;
        this.stockCount = stockCount;
    }
}
//I have got some get and set values for the code above 
//but it would have been too long to put in here
public class FoodProducts : Products
{
    public FoodProduct()
    {
        Console.WriteLine("This is food product");
    }
    public void Limit()
    {
        Console.WriteLine("This is an Attribute of a Product");
    }
}
SWe*_*eko 93
关于C#的几条规则在这里发挥作用:
每个类必须有一个构造函数(为了构造良好)
如果您不提供构造函数,编译器将自动为您提供构造函数,而不会更改.
这意味着该课程
class Demo{}
在编译时提供了一个空的构造函数,成为
class Demo{
   public Demo(){}
}
我能做到
Demo instance = new Demo();
如果确实提供了构造函数(任何具有任何签名的构造函数),则不会生成空构造函数
class Demo{
   public Demo(int parameter){}
}
Demo instance = new Demo(); //this code now fails
Demo instance = new Demo(3); //this code now succeeds
这似乎有点违反直觉,因为添加代码似乎打破了现有的无关代码,但这是C#团队的设计决策,我们必须忍受它.
当你调用派生类的构造函数时,如果你没有指定要调用的基类构造函数,编译器会调用空基类构造函数,所以
class Derived:Base {
   public Derived(){}
}
变
class Derived:Base {
   public Derived() : base() {}
}
因此,为了构造派生类,必须在基类上有一个无参数构造函数.看看如何向Products添加构造函数,并且编译器没有生成默认构造函数,您需要在代码中显式添加它,如:
public Products()
{
}
或者从派生的构造函数中显式调用它
public FoodProduct()
       : base(string.Empty, string.Empty, 0, 0, 0, 0)
{
}
dur*_*ill 13
由于Products没有构造函数接受0个参数,因此必须创建一个构造函数,FoodProducts以便调用Products所有必需参数的构造函数.
在C#中,这样做如下:
public class FoodProducts : Products
{
    public FoodProducts(string id, string name, double price, int soldCount, int stockCount, double tax)   
    : base(id, name, price, soldCount, stockCount, tax)
    {
    }
    public void Limit()
    {
        Console.WriteLine("This is an Attribute of a Product");
    }
}
如果您不想将此构造函数添加到FoodProducts,则还可以创建不带参数的构造函数Products.
继承类的构造函数需要首先构造基类.由于基类没有默认构造函数(取0个参数)而你没有使用现在的非默认构造函数,所以这不起作用.所以要么A)为你的基类添加一个默认的构造函数,在这种情况下,降序类的代码不需要改变; 或者B)从降序类的构造函数中调用基类的非默认构造函数,在这种情况下,基类不需要更改.
一个
public class Products
{
    public Products() { }
}
public class FoodProducts : Products
{
    public FoodProducts() { }
}
乙
public class Products
{
    public class Products(args) { }
}
public class FoodProducts : Products
{
    public FoodProducts(args) : base(args) { }
}
一些这说明相当OK MSDN上这里.
当您继承自 时,您必须在自己的类中Products调用 的基本构造。Products
您没有编写:base(id, name, ....),因此 C# 假定您调用默认的无参数构造函数,但它不存在。
创建一个默认的无参数构造函数Products。