Nowość w OOP i jestem zdezorientowany przez działanie konstruktorów klasy pochodnej podczas dziedziczenia z klasy bazowej w języku C#.Parametry konstruktora i dziedziczenie
Pierwsza klasa bazowa:
class BaseClass
{
private string BaseOutput = null;
public BaseClass(string BaseString)
{
BaseOutput = BaseString;
}
public virtual void PrintLine()
{
Console.WriteLine(BaseOutput);
}
}
Oto klasa pochodna:
class SubClass : BaseClass
{
private string SubOutput = null;
public SubClass(string BaseString, string SubString) : base(BaseString)
{
SubOutput = SubString;
}
public override void PrintLine()
{
Console.WriteLine(SubOutput);
}
}
Wreszcie główną częścią programu:
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();
}
}
Czego nie robić get jest, dlaczego, wywołując konstruktora dla klasy pochodnej, muszę również przekazać parametr, którego potrzebuje klasa bazowa. Czy pole BaseOutput w klasie pochodnej nie powinno pozostać ustawione na null, jeśli nie przypisano do niego żadnej wartości? Dlaczego nie coś podobnego do tego dzieła może:
public SubClass(string SubString) : base(BaseString)
Ponadto podczas wywoływania konstruktora w tej klasie pochodnej, pierwszy parametr musi być nazwany tak samo jak w klasie bazowej lub inny zgłasza błąd. Gdybym miał określić nową zmienną string o nazwie AnotherString w klasie pochodnej, dlaczego nie będzie to praca:
public SubClass(string AnotherString, string SubString) : base(BaseString)
Wreszcie, kiedy to zrobić we właściwy sposób i wpisać się to ...
public SubClass(string BaseString, string SubString) : base(BaseString)
... do czego służy pierwszy parametr w konstruktorze SubClass? Nie jest on przypisywany ani używany w żadnych metodach dla mojej klasy pochodnej. Dlaczego w ogóle muszę go tam umieścić?
Jest przechowywany przez ułamek sekundy, dopóki nie wywołasz konstruktora podklas. Następnie zastępujesz go ciągiem parametrów "2nd param". –