【问题标题】:Appending to a string (created in base class) in derived classes附加到派生类中的字符串(在基类中创建)
【发布时间】:2018-10-12 07:50:49
【问题描述】:

所以这是一个相当具体的问题。

假设我有一组类,它们都生成不同的字符串。它们之间唯一的共同点是它们在字符串中需要相同的“标题”。

我决定创建一个基类来生成标头,它们都派生自该标头。

internal abstract class StringBase
{
    public virtual string WriteString()
    {
        var headerString = "header";
        return headerString;
    }
}

现在是一个派生类,它必须包含标题,还要添加自己的后续字符串。

internal class DerivedString : StringBase
{
    public override string WriteString()
    {
        var derivedString = // How would I best add the header and append more to it?
        return derivedString;
    }
}

像这样覆盖它显然会覆盖基础WriteString() 所做的任何事情,那么我如何确保我得到它?会不会像在基础中添加一个非虚拟方法,然后以标头字符串作为参数调用虚拟方法?

internal abstract class StringBase
{
    public void WriteHeader()
    {
        var headerString = "header";
        WriteString(headerString);
    }

    public virtual string WriteString(string headerString)
    {
        var derivedString = headerString.Append("whateverString");

        return string.empty;
    }
}

internal class DerivedString : StringBase
{
    public override string WriteString(string headerString)
    {
        var derivedString = headerString.Append("whateverString");

        return derivedString;
    }
}

【问题讨论】:

    标签: c# inheritance overriding


    【解决方案1】:

    您可以为此使用 base 关键字,如下所示:

    internal class DerivedString : StringBase
    {
        public override string WriteString(string headerString)
        {
            var derivedString = base.WriteString().Append("whateverString");
    
            return derivedString;
        }
    }
    

    【讨论】:

      【解决方案2】:

      使其工作的一种方法是在基类中使用私有字段:

      internal abstract class StringBase
      {
          private string headerString = "header";
          public virtual string WriteString(String input=null)
          {
              return String.IsNullOrEmpty(input) ? headerString : headerString + input;
      
          }
      }
      

      然后你可以通过传入参数从派生类中调用方法。

      【讨论】:

        猜你喜欢
        • 2020-03-17
        • 1970-01-01
        • 1970-01-01
        • 2023-01-26
        • 2015-08-10
        • 2014-09-29
        • 1970-01-01
        • 2021-02-28
        • 2020-08-06
        相关资源
        最近更新 更多