【问题标题】:"Class does not contain a constructor taking 0 parameters" [closed]“类不包含采用 0 个参数的构造函数” [关闭]
【发布时间】:2013-03-07 03:42:34
【问题描述】:

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

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;
    }
}

【问题讨论】:

  • 请显示类用户...
  • 由于您没有在任何地方调用无参数构造函数,显然您没有向我们展示产生错误的代码。
  • 在User类中添加构造函数
  • C# does not contain a constructor?或User?如果您从 User 继承并且 User 没有 0 参数构造函数,您将收到该错误。

标签: c# oop


【解决方案1】:

您的基类(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()
        {
        }
    }

【讨论】:

  • 谢谢,我试试这个。
【解决方案2】:

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

这样就OK了:

class User
{
}

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

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

但这会导致您看到的错误(“'User' 不包含采用 '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 构造函数,并为其提供适当的参数。

【讨论】:

    【解决方案3】:

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

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

    此消息不言自明,User 类中没有无参数构造函数。

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

    public User()
    {}
    

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

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

    【讨论】:

    • 假设无参数构造函数对该类有意义。它可能不会。 OP 也可能无法修改该类。
    • 你调用基类构造函数的语法不正确。
    【解决方案4】:

    我怀疑您的 User 类不包含没有参数的构造函数。所以在构造Buyer的实例时不知道如何构造基类。

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

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多