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

时间:2017-03-26 09:46:15

标签: c#

在下面的代码中,我需要Base类构造函数来使用Derived类属性ServiceUrl。我无法将ServiceUrl定义为静态,因为它的值是基于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 个答案:

答案 0 :(得分:2)

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

  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. 不要在构造函数中使用变量。稍后再使用它。