在下面的代码中,我需要Base
类构造函数来使用Derived
类属性ServiceUrl
。我无法将ServiceUrl
定义为静态,因为它的值是基于Derived
类构造函数参数计算的。我无法将ServiceUrl
作为构造函数参数传递给Base
类,因为计算并不像图示的那样微不足道,它可能需要访问Base
/ Derived
类中的其他字段。
有关最佳出路的任何建议吗?我有权对Base
和Derived
类结构进行任何更改以达到目的。
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";
}
}
答案 0 :(得分:2)
将始终在派生类构造函数之前调用基类构造函数。因此,有两种解决方案:
在基类的构造函数中使用参数:
abstract class Base
{
public string ServiceUrl { get; }
public Base(string serviceUrl)
{
ServiceUrl = serviceUrl;
Console.WriteLine(ServiceUrl);
}
}
class Derived : Base
{
public Derived(string rootUrl) : base(rootUrl + "/service")
{
}
}