如何在所有派生类中修改方法返回值?

Ahm*_*tun 4 .net c# oop design-patterns

想象一下,您有一个类层次结构:

class Base
{
    public virtual string GetName()
    {
        return "BaseName";
    }
}

class Derived1 : Base
{
    public override string GetName()
    {
        return "Derived1";
    }
}

class Derived2 : Base
{
    public override string GetName()
    {
        return "Derived2";
    }
}
Run Code Online (Sandbox Code Playgroud)

以最恰当的方式,我如何以所有"GetName"方法添加"XX"字符串以在派生类中返回值的方式编写代码?

例如:

         Derived1.GetName returns "Derived1XX"

         Derived2.GetName returns "Derived2XX"
Run Code Online (Sandbox Code Playgroud)

更改GetName方法实现的代码并不是一个好主意,因为可能存在几种派生类型的Base.

Blo*_*ard 7

保留GetName非虚拟,并在该函数中添加"追加XX"逻辑.将名称(不带"XX")提取到受保护的虚拟函数,并覆盖子类中的名称.

class Base
{
    public string GetName()
    {
        return GetNameInternal() + "XX";
    }

    protected virtual string GetNameInternal() 
    {
        return "BaseName";
    }
}

class Derived1 : Base
{
    protected override string GetNameInternal()
    {
        return "Derived1";
    }
}

class Derived2 : Base
{
    protected override string GetNameInternal()
    {
        return "Derived2";
    }
}
Run Code Online (Sandbox Code Playgroud)