“类型”;“我的自行车项目”;不包含采用';0';论点C#
我的问题可能很简单,但我刚刚开始用C语言编程 我的问题是,如上所述:“类型“MyProject.Bike”不包含接受“0”参数的构造函数” 我不明白,因为我不想用空括号调用这个构造函数,读到类似的问题,答案都是“你必须有很多/没有足够的参数…” 我做这个只是为了学习,但我认为继承是一个非常重要的概念,所以我希望能够做到这一点 我的代码:“类型”;“我的自行车项目”;不包含采用';0';论点C#,c#,inheritance,constructor,C#,Inheritance,Constructor,我的问题可能很简单,但我刚刚开始用C语言编程 我的问题是,如上所述:“类型“MyProject.Bike”不包含接受“0”参数的构造函数” 我不明白,因为我不想用空括号调用这个构造函数,读到类似的问题,答案都是“你必须有很多/没有足够的参数…” 我做这个只是为了学习,但我认为继承是一个非常重要的概念,所以我希望能够做到这一点 我的代码: using System; namespace MijnConsoleProject { public class Bike {
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);
}
}
}
使用系统;
命名空间MijnConsoleProject
{
公共级自行车
{
保护内速度=0;
公共字符串名
{
收到
设置
}
公共空间加速(整数增量)
{
这是速度+=增量;
}
公共空间减速(整数递减)
{
这个速度-=减量;
{
公共重写字符串ToString()
{
返回名称+”:speed=“+speed;
}
公共自行车(国际速度)
{
这个速度=初始速度;
}
}
公共级齿轮自行车:自行车
{
私人int齿轮;
公共齿轮自行车(字符串名称)
{
this.name=名称;
}
公共变速器(内齿轮)
{
如果(档位<8和档位>0)
{
这个齿轮=齿轮;
返回true;
}
其他的
{
返回false;
}
}
公共重写字符串ToString()
{
返回名称+”:speed=“+speed+”,gear=“+gear;
}
公共静态void main(字符串[]args)
{
自行车节=新自行车(10);
Console.WriteLine(“[正常自行车:”);
Console.WriteLine(“{0}\n”,fiets);
齿轮自行车节2=新齿轮自行车(“节”);
控制台写入线(“[Geared Bike:]”);
Console.WriteLine(“{0}\n”,fiets2);
}
}
}
构造函数public GearedBike(字符串名称){…}
是public GearedBike(字符串名称):base(){…}
必须使用子类构造函数中的参数调用基类构造函数,或者向基类添加0-param构造函数
public GearedBike(string name) : base(42) {
// ...
}
构造函数
public GearedBike(字符串名){…}
是public GearedBike(字符串名):base(){…}
必须使用子类构造函数中的参数调用基类构造函数,或者向基类添加0-param构造函数
public GearedBike(string name) : base(42) {
// ...
}
构造函数不是继承的,因此在类中必须调用基类construcotr:
public GearedBike(string name):base(name)
{
this.name = name;
}
如果基类具有无参数构造函数,则无需执行此操作,构造函数不会被继承,因此在类中必须调用基类construcotr:
public GearedBike(string name):base(name)
{
this.name = name;
}
如果您的基类具有无参数构造函数,则无需执行此操作。您的
Bike
类只有一个构造函数:
public Bike(int initSpeed)
{
this.speed = initSpeed;
}
这只需要一个参数
派生类时,派生类的构造函数从基类调用构造函数
在您的GearedBike
class'构造函数中,您没有指定要调用Bike
的哪个构造函数,因此编译器假定Bike()
不存在
您可能需要下面这样的内容,其中我们指定要调用的基本构造函数,并传入适当的值
public GearedBike(string name)
: base(0)
{
this.name = name;
}
您可能还需要一个GearedBike
构造函数,可以在其中设置速度和名称,如下所示:
public GearedBike(string name, int initSpeed)
: base(initSpeed)
{
this.name = name;
}
你的
Bike
类只有一个构造函数:
public Bike(int initSpeed)
{
this.speed = initSpeed;
}
这只需要一个参数
派生类时,派生类的构造函数从基类调用构造函数
在您的GearedBike
class'构造函数中,您没有指定要调用Bike
的哪个构造函数,因此编译器假定Bike()
不存在
您可能需要下面这样的内容,其中我们指定要调用的基本构造函数,并传入适当的值
public GearedBike(string name)
: base(0)
{
this.name = name;
}
您可能还需要一个GearedBike
构造函数,可以在其中设置速度和名称,如下所示:
public GearedBike(string name, int initSpeed)
: base(initSpeed)
{
this.name = name;
}
GearedBike不会调用基类上的构造函数。如果您没有显式调用基类上的构造函数,编译器将调用基类上的默认构造函数。基类不包含默认构造函数;因此您会收到一个错误,说明这一点。GearedBike不会调用基类上的构造函数类。如果未显式调用基类上的构造函数,编译器将调用基类上的默认构造函数。基类不包含默认构造函数;因此,您将收到一个错误,说明这一点。C#编译器可以生成如下所示的默认构造函数
public Bike()
{
}
只有当类型没有任何用户定义的构造函数时才会发生这种情况。在您的情况下,类Bike有一个接受int的构造函数:
public Bike(int initSpeed)
{
this.speed = initSpeed;
}
前编译器不会生成默认的无参数构造函数
稍后在您的代码中,一个类型
GearedBike
通过调用:base()
(由编译器添加)来使用父类型的构造函数,但此调用失败,因为基类中没有无参数的构造函数。C#编译器可以生成一个类似
public Bike()
{
}
只有当类型没有任何用户定义的构造函数时才会发生这种情况。在您的情况下,类Bike有一个接受int的构造函数:
public Bike(int initSpeed)
{
this.speed = initSpeed;
}
前编译器不会生成默认的无参数构造函数
稍后在您的代码中,使用