类型“;MyProject.Bike”;不包含采用';0';参数C#
本文关键字:参数 MyProject Bike 类型 包含采 | 更新日期: 2023-09-27 18:22:03
我的问题可能很简单,但我刚开始用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);
}
}
}
Bike
类只有一个构造函数:
public Bike(int initSpeed)
{
this.speed = initSpeed;
}
这只需要一个参数。
当您派生一个派生类时,该派生类的构造函数从基类调用构造函数。
在GearedBike
类的构造函数中,您没有指定要调用Bike
的哪个构造函数,因此编译器假定Bike()
不存在。
您可能想要下面这样的东西,我们在其中指定要调用的基构造函数,并传递适当的值。
public GearedBike(string name)
: base(0)
{
this.name = name;
}
您可能还想要一个GearedBike
构造函数,可以在其中设置速度和名称,如下所示:
public GearedBike(string name, int initSpeed)
: base(initSpeed)
{
this.name = name;
}
public GearedBike(string name) { ... }
是public GearedBike(string name) : base() { ... }
的简写
您必须使用子类构造函数中的参数调用基类构造函数,或者向基类中添加一个0-param构造函数。
public GearedBike(string name) : base(42) {
// ...
}
构造函数不是继承的,因此在类extends bike中,您必须调用基类constructr:
public GearedBike(string name):base(name)
{
this.name = name;
}
如果基类有一个无参数的构造函数
C#编译器可以生成一个默认构造函数,它可能看起来像
public Bike()
{
}
只有当该类型没有任何用户定义的构造函数时,才会发生这种情况。在您的例子中,类Bike有一个构造函数,它采用int:
public Bike(int initSpeed)
{
this.speed = initSpeed;
}
前一个编译器不会为您生成默认的无参数构造函数。
稍后在代码中,类型GearedBike
通过调用:base()
(由编译器添加)来使用父类型的构造函数,但由于基类中没有无参数构造函数,因此此调用失败。