Im folgenden Code muss ich Base
Klassenkonstruktor Derived
Klasseneigenschaft ServiceUrl
verwenden. Ich kann ServiceUrl
nicht als statisch definieren, da sein Wert basierend auf Derived
Klassenkonstruktorargument berechnet wird. Ich kann nicht ServiceUrl
als Konstruktorargument zu Base
Klasse übergeben, da die Berechnung nicht so trivial ist wie dargestellt und es möglicherweise Zugriff auf andere Felder in Base
/Derived
Klassen erfordern.Verwenden Sie abgeleitete Klasseneigenschaft im Basisklassenkonstruktor
Irgendwelche Vorschläge für den besten Ausweg? Ich habe die Erlaubnis, Änderungen an Base
und Derived
Klassenstrukturen vorzunehmen, um den Zweck zu erreichen.
abstract class Base
{
public abstract string ServiceUrl { get; }
public Base()
{
Console.WriteLine(ServiceUrl);
}
}
class Derived : Base
{
public override string ServiceUrl { get; private set; }
public Derived(string rootUrl) : base()
{
ServiceUrl = rootUrl + "/service";
}
}
Muss es auf dem Konstruktor sein? weil du zuerst den Basiskonstruktor aufruft und nur dann kannst du den Kram in deinem Konstruktor starten ... –
Ja. Ich denke auch, dass das Übergeben an den Konstruktor ein gesunder Menschenverstand für diese Situation ist. Ich kann den Basisklassenkonstruktor wahrscheinlich als 'base (GetServiceUrl())' nennen, der 'ServiceUrl' intern setzt und seinen Wert zurückgibt. –