【发布时间】:2015-07-22 15:18:57
【问题描述】:
我希望继承方法 Invoke() 对最终子类 ConcreteExecutablePlugin 隐藏。
整体情况:
public abstract class PluginBase
{
public abstract void Invoke(IDictionary parameters);
}
public abstract class JobPlugin : PluginBase
{
protected void CheckParameter(){//....}
public bool IsActive(){//....}
}
public class ConcreteJobPlugin : JobPlugin
{
public override void Invoke(IDictionary parameters){//...}
}
public abstract class ExecutableJobPlugin : JobPlugin
{
protected abstract void Initialize(IDictionary parameters);
public sealed override void Invoke(IDictionary parameters)
{
//final realization of Invoke() method
}
}
public class ConcreteExecutablePlugin : ExecutableJobPlugin
{
//here i want method Invoke() has been already hiden
//!!!OR use base.Invoke() better?
protected override void Initialize(IDictionary parameters)
{
//concrete plugin initialization
}
}
我只找到了一种解决方案。现在,我正在为此使用密封。您如何看待这个解决方案?
你知道隐藏抽象继承方法的另一种方法吗?
【问题讨论】:
-
基本抽象方法被声明为
public,这表明它在设计上是有意可见的? -
@StuartLC,实际上,我已经有了更多层次的继承
-
您不能在派生类型中隐藏公共方法。或许应该改成
protected或者通过接口实现? -
@LasseV.Karlsen 你觉得使用密封解决这个问题怎么样?
-
您仍然无法隐藏您继承的公共方法。使类密封只会阻止声明新的后代类型。
标签: c# oop inheritance overriding abstract