Параметры конструктора и наследование
Новичок в ООП, и меня смущает, как работают конструкторы производного класса при наследовании от базового класса в 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 в производном классе не должно оставаться равным нулю, если ему не присвоено значение? Почему не может что-то вроде этой работы:
public SubClass(string SubString) : base(BaseString)
Кроме того, при вызове конструктора в этом производном классе первый параметр должен быть назван так же, как в базовом классе, иначе он выдаст ошибку. Если бы я должен был определить новую строковую переменную с именем AnotherString в производном классе, почему бы это не сработало:
public SubClass(string AnotherString, string SubString) : base(BaseString)
Наконец, когда вы делаете это правильно и печатаете это ...
public SubClass(string BaseString, string SubString) : base(BaseString)
... для чего используется первый параметр в конструкторе SubClass? Он не назначается и не используется в каких-либо методах для моего производного класса. Почему я должен даже положить его там вообще?