C# 参数与格式参数不对应;遗产

C# 参数与格式参数不对应;遗产,c#,inheritance,C#,Inheritance,我正在学习C语言,并且一直在练习继承的变体。其他的方法都有效,但是这个方法会抛出一个错误,指出参数与形式参数不对应。这个问题只有在我添加派生类时才会发生,我花了一个小时试图修复,但没有效果 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SoloLearn { class Progr

我正在学习C语言,并且一直在练习继承的变体。其他的方法都有效,但是这个方法会抛出一个错误,指出参数与形式参数不对应。这个问题只有在我添加派生类时才会发生,我花了一个小时试图修复,但没有效果

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


namespace SoloLearn
{
    class Program
    {
      public class Parent
      {
          public string fName, lName;
          public int employeeId;
          public Parent(string fName, string lName, int employeeId)
          {
              this.fName = fName;
              this.lName = lName;
              this.employeeId = employeeId;
          }
          public decimal Money(decimal d)
          {
              return d;
          }          
      }
      public class Child : Parent
      {

      }

        static void Main(string[] args)
        {

            Parent p1 = new Parent("Ted", "Baxter", 5432);

            Console.WriteLine("{0} {1} {2}", p1.fName, p1.lName, p1.employeeId);

            Console.WriteLine((p1.Money(5.50m)));
        Child c1 = new Child();
        Console.WriteLine(c1.fName);

        }
    }
}

子类必须调用基类的构造函数之一。当您有无参数构造函数时,编译器会为您处理此问题,但在您的情况下,您不会:

public Parentstring fName、string lName、int employeeId

您可以重写子类以将参数传递给基类:

public class Child : Parent
{
    public Child(string fName, string lName, int employeeId) : base(fName, lName, employeeId)
    {

    }
}
或者,您可以创建一个无参数构造函数并将伪值放入:

public class Child : Parent
{
    public Child() : base(string.Empty, string.Empty, -1)
    {

    }
}
或者两者兼而有之


请注意,基类的构造函数总是在子类的构造函数之前被调用。

每个构造函数都通过显式代码调用它的基类构造函数:

public ctor(int parameter) : base(parameter)
或者含蓄地:

public ctor(int parameter) {}
这实际上将被汇编为:

public ctor(int parameter) : base()
请注意,如果您没有明确说明要从基类执行的重载,则默认情况下将选择无参数构造函数,即使您的子构造函数与父构造函数之一具有完全相同的签名

在子类中,您不指定构造函数,因此c编译器为您提供默认构造函数。注意-静态类不能有构造函数,只能有静态构造函数。见Jeppe Stig Nielsen的评论

默认构造函数是一个无参数构造函数,它不初始化类实例中的任何值,当然,它调用基本的无参数构造函数。
由于您的基类没有无参数构造函数,因此会出现编译错误。

值得一提的是,如果您的类不是静态的,并且您自己没有指定构造函数,那么编译器将为您生成一个与公共类名等效的构造函数:对于受保护而不是公共的抽象类,基类{}。