Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 附加到派生类中的字符串(在基类中创建)_C#_Inheritance_Overriding - Fatal编程技术网

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

C# 附加到派生类中的字符串(在基类中创建),c#,inheritance,overriding,C#,Inheritance,Overriding,所以这是一个相当具体的问题 假设我有一组类,它们都生成不同的字符串。它们之间唯一的共同点是,它们在字符串中需要相同的“头” 我决定创建一个基类来生成标题,它们都是从中派生的 internal abstract class StringBase { public virtual string WriteString() { var headerString = "header"; return headerString; } } 现在,对于

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

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

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

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

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

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

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

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

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

        return derivedString;
    }
}