Nuovo a OOP e sono confuso da come i costruttori di classe derivata funzionano quando ereditano da una classe base in C#.Costruttore Parametri ed Eredità
prima della classe base:
class BaseClass
{
private string BaseOutput = null;
public BaseClass(string BaseString)
{
BaseOutput = BaseString;
}
public virtual void PrintLine()
{
Console.WriteLine(BaseOutput);
}
}
Ecco la classe derivata:
class SubClass : BaseClass
{
private string SubOutput = null;
public SubClass(string BaseString, string SubString) : base(BaseString)
{
SubOutput = SubString;
}
public override void PrintLine()
{
Console.WriteLine(SubOutput);
}
}
Infine, la parte principale del programma:
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();
}
}
Quello che non mi è perché, quando si chiama il costruttore per la classe derivata, devo anche passare il parametro di cui ha bisogno la classe base. Il campo BaseOutput nella classe derivata non dovrebbe rimanere impostato su null se non viene assegnato alcun valore? Perché non è possibile una cosa del genere di lavoro:
public SubClass(string SubString) : base(BaseString)
Inoltre, quando si chiama il costruttore in questa classe derivata, il primo parametro deve essere nominato lo stesso di quello nella classe base oppure si genera un errore. Se dovessi definire una nuova variabile stringa chiamata AnotherString nella classe derivata, perché non sarebbe questo lavoro:
public SubClass(string AnotherString, string SubString) : base(BaseString)
Infine, quando si esegue questa operazione nel modo giusto e digita questo ...
public SubClass(string BaseString, string SubString) : base(BaseString)
... qual è il primo parametro utilizzato nel costruttore SubClass? Non viene assegnato o utilizzato in alcun metodo per la mia classe derivata. Perché devo persino metterlo lì?
Viene memorizzato per una frazione di secondo finché non si chiama il costruttore delle sottoclassi. Quindi lo si sovrascrive con la stringa del parametro "2nd param". –