“类型”;“我的自行车项目”;不包含采用';0';论点C#

“类型”;“我的自行车项目”;不包含采用';0';论点C#,c#,inheritance,constructor,C#,Inheritance,Constructor,我的问题可能很简单,但我刚刚开始用C语言编程 我的问题是,如上所述:“类型“MyProject.Bike”不包含接受“0”参数的构造函数” 我不明白,因为我不想用空括号调用这个构造函数,读到类似的问题,答案都是“你必须有很多/没有足够的参数…” 我做这个只是为了学习,但我认为继承是一个非常重要的概念,所以我希望能够做到这一点 我的代码: using System; namespace MijnConsoleProject { public class Bike {

我的问题可能很简单,但我刚刚开始用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);
        }
    }
}
使用系统;
命名空间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;
}
前编译器不会生成默认的无参数构造函数


稍后在您的代码中,使用