【发布时间】:2014-11-25 14:58:04
【问题描述】:
假设您有一个类层次结构:
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";
}
}
如何以最合适的方式编写代码,使所有“GetName”方法都在派生类中添加“XX”字符串以返回值?
例如:
Derived1.GetName returns "Derived1XX"
Derived2.GetName returns "Derived2XX"
更改GetName方法实现的代码不是好主意,因为Base可能存在几种派生类型。
【问题讨论】:
-
这通常不是一个好的设计。如果您不希望孩子们发生某些变化,请发送
sealed。 -
@Renan 方法默认是密封的,它们必须是
virtual才能被覆盖。如果班级是sealed,则不能有孩子。并且 OP 确实希望GetName在每个孩子中返回不同的东西——他只想要一个共同的后缀。 -
@Blorgbeard true.dat。我完全忘记了。
-
@Renan 其实我只是noticed 说你可以在你覆盖它们时实际上密封方法,这样它们就不能被进一步覆盖。但它只允许覆盖虚拟方法。
标签: c# .net oop design-patterns