基本继承错误,其中参数
本文关键字:参数 错误 继承 | 更新日期: 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 类的构造函数的参数。