“类不包含带0参数的构造函数”

时间:2013-03-18 17:23:12

标签: c# oop

我很困惑,为什么这不会运行。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Buyer : User
    {
        public void AuctionWon()
        {
        }
    }
}

我得到“不包含带0参数的构造函数”。我已经手头搜索过帮助,但没有结果有帮助。

这是用户类

public class User
{

    private int accountNo;
    private int password;

    public User(int accountNo, int password)
    {
        this.accountNo = accountNo;
        this.password = password;

    }

    public bool Validatepassword(int userpassword)
    {
        if (password == userpassword)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetAccountNo()
    {
        return accountNo;
    }
}

4 个答案:

答案 0 :(得分:12)

看起来你的基类(User类)没有任何有0个参数的构造函数。

您的用户类有一个类似的构造函数:

public class User
{
    public User(int accountNo, int password)
    {
        this.accountNo = accountNo;
        this.password = password;

    }
}

和买方必须像以下一样继承:

    public class Buyer : User
    {
        public Buyer(int accountNo, int password) : base(accountNo, password)
        {
        }

        public void AuctionWon()
        {
        }
    }

答案 1 :(得分:2)

如果基类(User)的构造函数至少有一个参数,但没有没有参数的构造函数,则会发生此错误。

所以这没关系:

class User
{
}

class Buyer : User
{
    public void AuctionWon()
    {
    }
}

因为用户没有任何构造函数,所以编译器会自动为您创建一个带有0参数的默认“隐藏”构造函数。

但是这会导致你看到的错误(“'用户'不包含带'0'参数的构造函数”):

class User
{
    public User(string text)
    {
    }
}

class Buyer : User
{
    public void AuctionWon()
    {
    }
}

因为User现在有一个显式的构造函数,所以编译器不会创建0个参数的默认构造函数。您可以向User添加一个0参数构造函数,但在这种情况下,User类的设计者通常会调用User构造函数并提供适当的参数,例如,

class User
{
    public User(string text)
    {
    }
}

class Buyer : User
{
    public Buyer() : base("Adam")
    {
    }

    public void AuctionWon() 
    {
    }
}

我们现在已经向Buyer添加了一个构造函数,该构造函数调用现有的User构造函数,并为其提供适当的参数。

答案 2 :(得分:0)

运行程序时,这是你得到的错误

'ConsoleApplication3.User' does not contain a constructor that takes 0 arguments

此消息可以解释为User类中没有无参数构造函数。

在User类中添加无参数构造函数(如果它可编辑而不在某些dll中,否则不可能),如

public User()
{}

如果用户包含带参数的构造函数,请像这样使用

public class Buyer : User
{
    public Buyer() : base(FooBar)
    {
    }
}

答案 3 :(得分:0)

我怀疑你的User类不包含没有参数的构造函数。因此,在构造Buyer的实例时,不知道如何构造基类。

为了解决它:在Buyer类中创建一个空构造函数,让它从基类(User)调用构造函数。