我的问题可能很简单,但我刚开始用C#编程。
我的问题是,如上所列:“类型”MyProject.Bike“不包含带'0'参数的构造函数”。
我不明白,因为我没有尝试用空括号调用这个构造函数,并且阅读类似的问题都回答为“你需要很多/没有足够的参数......”。
我刚刚学习这个,但我认为继承是一个非常重要的概念,所以我希望能够做到这一点......
我的代码:
using System;
namespace MijnConsoleProject
{
public class Bike
{
protected int speed = 0;
public String name
{
get;
set;
}
public void speedUp(int increment)
{
this.speed += increment;
}
public void slowDown(int decrement)
{
this.speed -= decrement;
{
public override string ToString ()
{
return name + ": speed = " + speed;
}
public Bike(int initSpeed)
{
this.speed = initSpeed;
}
}
public class GearedBike : Bike
{
private int gear;
public GearedBike(string name)
{
this.name = name;
}
public bool changeGear(int gear)
{
if(gear < 8 && gear > 0)
{
this.gear = gear;
return true;
}
else
{
return false;
}
}
public override string ToString ()
{
return name + ": speed=" + speed + ", gear=" +gear;
}
public static void main(String[] args)
{
Bike fiets = new Bike(10);
Console.WriteLine("[Normal Bike:]");
Console.WriteLine("{0}\n", fiets);
GearedBike fiets2 = new GearedBike("Fiets");
Console.WriteLine("[Geared Bike:]");
Console.WriteLine("{0}\n", fiets2);
}
}
}
答案 0 :(得分:2)
构造函数public GearedBike(string name) { ... }
是public GearedBike(string name) : base() { ... }
您必须使用子类构造函数中的参数调用基类构造函数,或者将0-param构造函数添加到基类中。
public GearedBike(string name) : base(42) {
// ...
}
答案 1 :(得分:0)
GearedBike不会在基类上调用构造函数。如果没有在基类上显式调用构造函数,编译器将调用基类的默认构造函数。基类不包含默认构造函数;因此,您收到一条错误说明。
答案 2 :(得分:0)
C#编译器可以生成一个看起来像
的默认构造函数public Bike()
{
}
只有在类型没有任何用户定义的构造函数时才会发生这种情况。在你的例子中,类Bike有一个构造函数,它接受一个int:
public Bike(int initSpeed)
{
this.speed = initSpeed;
}
前编译器不会生成默认的无参数构造函数。
稍后在代码中,类型GearedBike
通过调用:base()
(由编译器添加)来使用父类型的构造函数,并且此调用失败,因为基类中没有无参数构造函数。