【问题标题】:Parent does not contain constructor that takes 0 argumentsParent 不包含采用 0 个参数的构造函数
【发布时间】:2013-02-16 23:00:58
【问题描述】:

如果我在 C# 中有这段代码:

public abstract class Parent
{
    private int x;
    public Parent(int x)
    {
        this.x = x;
    }
    public abstract void foo;
}  
public class Child
{
    public override void foo()
    {  
        x = x + 10;
    }
}

我收到以下错误:

Parent 不包含采用 0 个参数的构造函数。

如何在不创建非参数构造函数的情况下修复它?

【问题讨论】:

    标签: c#


    【解决方案1】:

    这是因为有一个零参数的构造函数的隐式调用。

    所以你需要添加一个显式调用:

    public Child(int x) : base(x)
    {
    }
    

    或者,您可以在父级本身中添加零参数构造函数:

    public parent() { }
    

    【讨论】:

      【解决方案2】:

      通过手动调用Parent的构造函数:

      public class Child: Parent {
          public Child( ) 
              : base(0) { }
      
          public override void foo( ) {  
              x = x + 10;
          }
      }
      

      【讨论】:

        【解决方案3】:

        你可以在Child中创建一个构造函数,例如

        public Child(int x) : base(x)
        {
        }
        

        构造函数是继承的 - 但如果你根本不提供任何构造函数,C# 编译器会尝试创建一个与此等效的构造函数:

        public Child() : base()
        {
        }
        

        这就是这里的失败之处,因为没有可调用的无参数基础构造函数。

        当然,您的派生类构造函数不必具有与基类构造函数相同的参数 - 只要它将适当的参数传递给基类构造函数,就可以了。例如,你可以写:

        public Child() : base(0) // Default to x = 0
        {
        }
        

        更多详情请查看我的article on constructors

        【讨论】:

          猜你喜欢
          • 2011-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-10
          • 2013-02-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多