追加到派生类中的字符串(在基类中创建)

时间:2018-10-12 07:50:49

标签: c# inheritance override

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

    }
}

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

答案 1 :(得分:1)

您可以为此使用base关键字,

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

        return derivedString;
    }
}