C# 在基类构造函数中使用派生类属性
在下面的代码中,我需要C# 在基类构造函数中使用派生类属性,c#,C#,在下面的代码中,我需要Base类构造函数来使用Derived类属性ServiceUrl。我不能将ServiceUrl定义为静态的,因为它的值是基于派生的类构造函数参数计算的。我无法将ServiceUrl作为构造函数参数传递给Base类,因为计算并不像图中所示的那么简单,可能需要访问Base/派生的类中的其他字段 对于最好的解决办法有什么建议吗?我有权对Base和Derived类结构进行任何更改,以达到此目的 abstract class Base { public abstract s
Base
类构造函数来使用Derived
类属性ServiceUrl
。我不能将ServiceUrl
定义为静态的,因为它的值是基于派生的
类构造函数参数计算的。我无法将ServiceUrl
作为构造函数参数传递给Base
类,因为计算并不像图中所示的那么简单,可能需要访问Base
/派生的
类中的其他字段
对于最好的解决办法有什么建议吗?我有权对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";
}
}
基类构造函数总是在派生类构造函数之前被调用。因此,有两种解决方案:
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")
{
}
}
基类构造函数总是在派生类构造函数之前被调用。因此,有两种解决方案:
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")
{
}
}
它必须在构造函数上吗?因为你首先调用基本构造函数,然后才可以在构造函数中启动东西…是的。。我也认为传递给构造函数是这种情况下的常识。我可能可以将基类构造函数称为
base(GetServiceUrl())
,它在内部设置ServiceUrl
,并返回其值。它必须在构造函数上吗?因为你首先调用基本构造函数,然后才可以在构造函数中启动东西…是的。。我也认为传递给构造函数是这种情况下的常识。我可能可以将基类构造函数称为base(GetServiceUrl())
,它在内部设置ServiceUrl
,并返回其值。这主意不错。。我应该在基类中将ServiceUrl
作为非abstract
属性。好主意。。我应该将ServiceUrl
作为基类中的非abstract
属性。