覆盖基类抽象方法并将其隐藏在派生类中

时间:2012-08-04 13:54:59

标签: c# visual-studio-2010 inheritance

我有两种类型的基类;

public abstract class Base
{
    public abstract object Work();
}

public abstract class AuthenticatedBase : Base
{
    public abstract object Work(T request);
}

经过身份验证的类会做一些额外的工作来预先检查登录。然后我从两个基类扩展了不同的类;

public class A : Base
{
    public override object Work()
    {
        // Work here
    }
}

public class B : AuthenticatedBase
{
    public override object Work(T request)
    {
        // Work here
    }
}

基本上,当我创建一个派生自AuthenticatedBase的新类B时,Visual Studio说我需要从Base类实现Work(),即使我在AuthenticatedBase中有一个替代实现,我仍在使用不同的参数。我应该做什么,以便我不必从继承类的基类实现Work()方法?

2 个答案:

答案 0 :(得分:1)

在AuthenticatedBase中实现无参数的Work方法,并使用“sealed”关键字阻止它在AuthenticatedBase的继承者上显示。

答案 1 :(得分:0)

你必须实现它,没有办法解决它。这种情况下,多重继承会派上用场。

您可以使用合成,以便B引用A。然后B.Work()可以致电A.Work()

或者,实施B.Work()以便它调用B.Work(T)。或者甚至将Base.Work()作为A的基本实现的虚拟方法。