OOP 的新手,我对从 C# 中的基类继承时派生类构造函数的工作方式感到困惑。
首先是基类:
class BaseClass
{
private string BaseOutput = null;
public BaseClass(string BaseString)
{
BaseOutput = BaseString;
}
public virtual void PrintLine()
{
Console.WriteLine(BaseOutput);
}
}
这是派生类:
class SubClass : BaseClass
{
private string SubOutput = null;
public SubClass(string BaseString, string SubString) : base(BaseString)
{
SubOutput = SubString;
}
public override void PrintLine()
{
Console.WriteLine(SubOutput);
}
}
最后,程序的主要部分:
class Program
{
static void Main(string[] args)
{
BaseClass theBase = new BaseClass("Text for BaseClass");
SubClass theSub = new SubClass("2nd param", "Text for SubClass");
theBase.PrintLine();
theSub.PrintLine();
Console.ReadKey();
}
}
我不明白的是,为什么在调用派生类的构造函数时,我还必须传递基类所需的参数。如果没有分配值,派生类中的 BaseOutput 字段不应该保持设置为 null 吗?为什么不能这样工作:
public SubClass(string SubString) : base(BaseString)
此外,在这个派生类中调用构造函数时,第一个参数的名称必须与基类中的相同,否则会引发错误。如果我要在派生类中定义一个名为 AnotherString 的新字符串变量,为什么这不起作用:
public SubClass(string AnotherString, string SubString) : base(BaseString)
最后,当您以正确的方式执行此操作并输入此内容时...
public SubClass(string BaseString, string SubString) : base(BaseString)
... SubClass 构造函数中的第一个参数是做什么用的?它没有在我的派生类的任何方法中分配或使用。为什么我必须把它放在那里?