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.
保留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)