【发布时间】:2015-03-13 09:14:03
【问题描述】:
如果另一个方法被覆盖,有没有办法强制覆盖一个虚拟方法?
public class BaseClass
{
protected virtual void A()
{
// a default action called first
}
protected virtual void B()
{
// a default action called second that,
// if A was overriden, makes no sense
}
}
编辑
非常感谢您的回答。看看如何实现这一点非常有趣,但对于我的明确案例来说,这并不是至关重要的。
另外,我忘了提到这些方法将如何使用:(在 BaseClass 中)
pulbic bool EditEntity(Guid id)
{
A();
// Some code that edits Entites
B();
}
【问题讨论】:
-
如果
Equals被覆盖,没有人会强迫你覆盖GetHashCode -
问题是如果
A被覆盖,为什么B不再有意义。 -
如果你覆盖其中一个,不覆盖另一个是一个糟糕的设计,它可能会产生一个警告(至少在某些静态分析工具中),但它并没有被语言禁止跨度>
-
@TimSchmelter 我正在编辑与实体框架的关系,默认设置是什么都不做。否则将调用不必要的检查。这只是一个优化的事情,没有什么过分重要的。
-
使其抽象化并且不实现方法体?然后派生类必须实现它们
标签: c#