【发布时间】:2009-05-08 14:15:29
【问题描述】:
提出这个问题的行为本身就表明我对这个问题的处理方法是不正确的,所以我对直接解决问题的答案以及对我正在做的事情提出更简洁方法的答案感兴趣。
考虑一个基类,它提供一组标准的服务和功能,以及围绕这些的一些结构。通过比喻的方式,让我们考虑以下示例类:
public class ExampleBase
{
public void Main()
{
// Do something
PreValidate(); // Extensibility point for derived classes
// Do something else
PostValidate(); // Extensibility point for derived classes
// Do something else
}
protected virtual void PreValidate()
{
}
protected virtual void PostValidate()
{
}
}
派生类现在可以覆盖这些虚拟方法以提供一些自定义逻辑。
问题来了:基类是否有可能在运行时发现派生类是否冒昧地重写了这些虚拟方法之一,之前调用虚方法?
(如果在调用该方法之后知道这个问题的答案就足够了,那么您也许可以用设置私有标志的方法替换基类中的空方法,这将表示该方法没有被覆盖。但是,如果派生类在其覆盖的实现中调用base.PreValidate(),这可能会被愚弄。)
如果需要这种级别的灵活性,也许最好的解决方案是使用完全不同的可扩展机制?
【问题讨论】:
标签: .net