如果构造函数必须放在派生类中,为什么需要一个不包含基类中的参数的构造函数?
public class profile
{
int experience;
string qualification;
string skills;
public profile(int exp, string qual, string skill)
{
experience = exp;
qualification = qual;
skills = skill;
}
public void DisplayProfile()
{
Console.WriteLine(experience);
Console.WriteLine(qualification);
Console.WriteLine(skills);
}
}
public class resume:profile
{
string Firstname;
string Lastname;
string description;
string volunteer;
string achievements;
public resume(string fname, string lanme, string des, string vol, string ach)
{
Firstname = fname;
Lastname = lanme;
description = des;
volunteer = vol;
achievements = ach;
}
public void DisplayResume()
{
Console.WriteLine(Firstname);
Console.WriteLine(Lastname);
Console.WriteLine(description);
Console.WriteLine(volunteer);
Console.WriteLine(achievements);
}
}
这是我的代码现在我在简历构造函数中收到错误,该配置文件不包含带0参数的构造函数。
如果我通过创建一个超出0参数的额外构造函数来重载基类中的构造函数,则会删除此错误。
现在我无法理解这个原因。
答案 0 :(得分:0)
我不确定我的问题是否正确。但是根据下面的代码,没有必要,并且没有编译时错误:
public class BaseClass
{
//No constructor is OK
}
public class DeriveClass : BaseClass
{
//No constructor is OK
}
class Program
{
static void Main(string[] args)
{
DeriveClass dc = new DeriveClass();
}
}
你想要实现的是什么?
答案 1 :(得分:0)
OP是正确的,编译器抱怨它。如果你必须有一个带参数的构造函数,那么你将不得不在所有子类中创建一个带参数的构造函数。此外,您还必须明确地调用父的构造函数。
resume
的构造函数应为:
public resume(string fname, string lanme, string des, string vol, string ach,int exp, string qual, string skill) : base(exp, qual, skill)
{
Firstname = fname;
Lastname = lanme;
description = des;
volunteer = vol;
achievements = ach;
}
请参阅修改后的参数列表以及调用base()的方法。
答案 2 :(得分:0)
你需要理解继承的概念。
这是一个例子
class BaseClass
{
public BaseClass(){Console.WriteLine("This is Base Class")} // This is Base Class constructor (parameterless)
}
class DerivedClass:BaseClass{
public DerivedClass(){Console.WriteLine("This is Derived Class")} // This is Derived Class constructor (parameterless)
}
现在在您的控制台主程序中创建DerivedClass的对象
DerivedClass c=new DerivedClass();
在此行,您将获得两个控制台输出
This is Base Class
This is Derived Class
这是因为构造函数是从base调用派生的。在你调用resume
构造函数的情况下,它会查找profile
的默认构造函数。它确实找到了profile的构造函数,但这里的构造函数有3个参数因此它希望您提供3个参数,您可以使用
public resume(string fname, string lanme, string des, string vol, string ach)
:this(10,"","")
{
}
或提供没有参数的默认构造函数。
public profile()
{
}