重写基类抽象方法并将它们隐藏在派生类中

本文关键字:隐藏 派生 基类 抽象方法 重写 | 更新日期: 2024-10-24 16:29:56

我有两种类型的基类;

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说我需要从基类实现Work(),尽管我在AuthenticatedBase中有一个替代实现,我正在覆盖它,当然有不同的参数。我应该做些什么,这样我就不必从继承类中的基类实现Work()方法了?

重写基类抽象方法并将它们隐藏在派生类中

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

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

您可以使用composition使B具有对A的引用。则B.Work()可以调用A.Work()

或者,实现B.Work(),使其调用B.Work(T)。或者甚至使Base.Work()成为具有A的基本实现的虚拟方法。