Новый для ООП, и я смущен тем, как конструкторы производного класса работают при наследовании от базового класса в С#.
Сначала базовый класс:
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? Он не назначается или не используется ни в каких методах для моего производного класса. Почему я вообще должен его там даже поставить?