繁体   English   中英

在基类构造函数中使用派生类属性

[英]Use derived class property in base class constructor

在以下代码中,我需要Base类构造函数才能使用Derived类属性ServiceUrl 我无法将ServiceUrl定义为static,因为其值是根据Derived类构造函数参数计算得出的。 我无法将ServiceUrl作为构造函数参数传递给Base类,因为计算不像所说明的那么简单,它可能需要访问Base / Derived类中的其他字段。

有什么最好的出路建议吗? 我有权对BaseDerived类结构进行任何更改以达到目的。

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";
    }
}

基类构造函数将始终在派生类构造函数之前被调用。 因此,有两种解决方案:

  1. 在基类的构造函数中使用参数:

     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") { } } 
  2. 不要在构造函数中使用变量。 以后再使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM