基本继承错误,其中参数

本文关键字:参数 错误 继承 | 更新日期: 2023-09-27 18:31:13

我需要将事件的固有性创建为游泳事件,但是我收到构造函数不包含 0 个参数的错误,问题是我不知道哪些参数要传递。任何帮助将不胜感激。

//Base Class
class Event
 {
    private string m_evName;
    private string m_evDate;
    private string m_evTime;
    private string m_evFee;
    private string m_evVenue;
    private List<Athlete> m_athletes;

    public String EvName { get { return m_evName; } }
    public String EvDate { get { return m_evDate; } }
    public String EvTime { get { return m_evTime; } }
    public String EvFee { get { return m_evFee; } }
    public String Venue { get { return m_evVenue; } }

    //Getters/Setters - Making private variables avilable in public space through class method
    public Event(String EvName, String EvDate, String EvTime, String EvFee, String EvVenue)
    {
        m_evName = EvName;
        m_evDate = EvDate;
        m_evTime = EvTime;
        m_evFee = EvFee;
        m_evVenue = EvVenue;
        m_athletes = new List<Athlete>();
    }
 } 

   //child class
  class SwimmingEvent : Event
   {
    private String m_distance;
    private String m_inOutVar;
    public SwimmingEvent(String Distance, String InOrOut)
    {
        m_distance = Distance;
        m_inOutVar = InOrOut;
    }

}

基本继承错误,其中参数

因为SwimmingEvent是一个Event,你需要把你传递给Event构造函数的所有参数传递给SwimmingEvent的构造函数,然后传递一些:

public SwimmingEvent(String EvName, String EvDate, String EvTime, String EvFee, String EvVenue, String Distance, String InOrOut)
:   base (EvName, EvTime, EvFee, EvVenue, Distance) {
    m_distance = Distance;
    m_inOutVar = InOrOut;
}
using System;
public class MyBase
{
   int num;
   public MyBase(int i )
   {
      num = i;
      Console.WriteLine("in MyBase(int i)");
   }
   public int GetNum()
   {
      return num;
   }
}
public class MyDerived: MyBase
{
    // This constructor will call MyBase.MyBase(int i)
    ***//You are missing this.***
   public MyDerived(int i) : base(i)
   {
   }
}

您需要将所有参数传回父级。

  class SwimmingEvent : Event
   {
    private String m_distance;
    private String m_inOutVar;
    public SwimmingEvent(String Distance, String InOrOut, string evName) : base (evName,"b","c", "d", "e")
    {
        m_distance = Distance;
        m_inOutVar = InOrOut;
    }
}
可能是

这样的:

public class Event
{
    public Event() {} // public empty ctor 
    ....
    ....
}

和派生

public class SwimmingEvent  : Event
{
}

通过这种方式,您将避免(假设这是您想要的)编译时错误,因为基类中已经存在具有空参数列表的ctor

如果这不是您要搜索的内容,请澄清。

在 C# 中,在调用派生类的构造函数(如 SwimmingEvent 构造函数)之前,还必须调用基类(Event 类)的构造函数。调用基类构造函数的参数通常使用"base"关键字指定,如下所示:

class SwimmingEvent : Event
{
    ....
    public SwimmingEvent(String Distance, String InOrOut)
        :base(/*Arguments for base class constructor*/)
    {
        //Constructor of derived class
    }
}
如果省略":base(

...)",编译器将假定调用基类的无参数构造函数,例如编写":base()"。但是基类中没有无参数构造函数,因此会出现错误。

您必须在 Event 类中创建无参数构造函数

,或者添加 "base" 关键字并在 SwimmingEvent 的声明中指定用于调用现有 Event 类的构造函数的参数。