7

在我的表单加载中,我有这个代码:

    private void Form1_Load(object sender, EventArgs e)
    {
        CharityCyclists cyclist1 = new CharityCyclists();
        CharityCyclists cyclist2 = new CharityCyclists("a", 1, "Finished", 0, 0, 0, "One Wheel", 1, 500);

        cyclist1.Type = "Novelty Charity Cyclist";
        cyclist1.Number = 1;
        cyclist1.Finished = "Not Finished";
        cyclist1.Hours = 0;
        cyclist1.Mins = 0;
        cyclist1.Secs = 0;
        cyclist1.Bicycle = "Tricycle";
        cyclist1.Wheels = 3;
        cyclist1.FundsRaised = 300;
    }

但是,我收到一条错误消息,提示“'CycleEvent.CharityCyclists' 不包含采用 0 个参数的构造函数”,它表示该错误与这部分代码有关:

CharityCyclists cyclist1 = new CharityCyclists();

这是我的 CharityCyclists 课程:

class CharityCyclists : Cyclists
{
    private string bicycle;
    private int wheels;
    private double fundsRaised;

    public string Bicycle
    {
        get { return bicycle; }
        set { bicycle = value; }
    }

    public int Wheels
    {
        get { return wheels; }
        set { wheels = value; }
    }

    public double FundsRaised
    {
        get { return fundsRaised; }
        set { fundsRaised = value; }
    }

    public CharityCyclists(String type, int number, String finished, int hours, int mins, int secs, string bicycle, int wheels, double fundsRaised) : base(type, number, finished, hours, mins, secs, fundsRaised)
    {
        this.bicycle = bicycle;
        this.wheels = wheels;
        this.FundsRaised = fundsRaised;
    }

    public override string ToString()
    {
        return base.ToString() + " riding a " + bicycle + " with " + wheels + " wheels" ;
    }
}

谢谢!

4

10 回答 10

18

那是因为CharityCyclists该类没有不带参数的构造函数。

如果您没有定义其他构造函数,C# 编译器将为您生成默认构造函数。如果您自己定义构造函数(如您所愿),C# 编译器将不会生成默认构造函数。

如果要允许CharityCyclists不带参数构造,请将此代码添加到类中:

public CharityCyclists() 
{}
于 2012-11-06T21:54:13.663 回答
2

当你为你的类提供了一个带参数的构造函数时,编译器不再创建一个空的构造函数。

因此,您不能调用空构造函数,因为它不存在。您需要在类的代码中显式编写接受 0 个参数的构造函数。

于 2012-11-06T21:59:00.390 回答
1

如果声明了构造函数,类不会自动获得默认构造函数。您将需要创建一个无参数构造函数来解决问题,或者调用接受参数的构造函数。

于 2012-11-06T21:54:01.390 回答
1

您没有不带参数的构造函数。

你需要添加

public CharityCyclists()
{
    this.bicycle = "bike";
    this.wheels = 2;
    this.FundsRaised = 0;
}

或类似的东西

于 2012-11-06T21:54:06.847 回答
1

创建不包含 0 个参数的构造函数时,会自动删除默认构造函数。您应该创建一个新的默认构造函数(不带参数),这将解决这个问题。

于 2012-11-06T21:55:00.147 回答
1

如果您没有任何构造函数,C# 将为您隐式创建一个空的。它在功能上与您编写的内容相同:

public CharityCyclists()
{
}

但是,只有在您没有构造函数时它才会这样做。你有一个,所以这不会发生。您需要显式创建一个不带参数的构造函数。

于 2012-11-06T21:55:25.903 回答
1

你没有那个没有参数的类的构造函数。您拥有的唯一构造函数带有参数。将此添加到您的课程中:

public CharityCyclists() { } 
于 2012-11-06T22:02:18.947 回答
0

将此添加到CharityCyclists类中:

public CharityCyclists()
{
}

您无法对以下行进行编码:

CharityCyclists cyclist1 = new CharityCyclists();

除非你有那个构造函数。

于 2012-11-06T21:55:56.310 回答
0

在 .NET 中,如果没有声明其他构造函数,则隐式存在无参数(无参数)构造函数。一旦您声明了一个带参数的构造函数,您还必须显式声明另一个不带参数的构造函数,以便您的代码继续编译。

于 2012-11-06T21:56:24.843 回答
0

您正在尝试将 cyclist1 实例化为不带任何参数的 CharityCyclists 类的实例 - 这需要不带参数的构造函数。

但是 CharityCyclists 类的定义只有一个带有 9 个参数的构造函数。由于该构造函数需要 9 个参数,因此 cyclist1 将不匹配该构造函数。您需要一个不带参数的构造函数,如下所示:

public CharityCyclists()
{
    this.bicycle ="";
    this.wheels = 0;       
    this.FundsRaised = 0.0;
}
于 2012-11-06T21:57:25.897 回答