执行'受保护的抽象覆盖'用于实现泛型接口的抽象类

本文关键字:实现 泛型接口 抽象类 用于 覆盖 受保护 执行 抽象 | 更新日期: 2023-09-27 18:05:21

我有一个看起来像这样的界面:

public interface ISomeInterface<out TEntityA, TEntityB> 
    where TEntityA : ISomeEntityA
    where TEntityB : ISomeEntityB
{
    TEntityA SomeMethod(TEntityB entityB);
}  
另一方面,我有一个实现这个接口的抽象类,所以,使用智能感知,实现看起来是这样的:
public abstract class BaseAbstractClass : ISomeInterface<EntityA, EntityB>
{
    public EntityA SomeMethod(EntityB entityB)
    {
        throw new NotImplementedException();
    }
}

由于EntityAEntityB分别是ISomeEntityAISomeEntityB的具体实现,似乎我被迫抛出NotImplementedException,这看起来很脏。

由于您不能在重写方法时更改签名,我的问题是:"是否有一种方法可以执行'受保护的抽象重写',以便在BaseAbstractClass的继承类中强制实现 someemethod ?"

为了更清晰,我想这样做(它不会编译):

public abstract class BaseAbstractClass : ISomeInterface<EntityA, EntityB>
{
    public abstract override EntityA SomeMethod(EntityB entityB);
}

执行'受保护的抽象覆盖'用于实现泛型接口的抽象类

你为什么不叫别的名字呢?

public abstract class BaseAbstractClass : ISomeInterface<EntityA, EntityB>
{
    protected abstract EntityA SomeMethodImpl(EntityB entityB);
    public EntityA SomeMethod(EntityB entityB) 
    {
        return SomeMethodImpl(entityB);
    }
}

直接去掉override。这将编译:

public abstract class BaseAbstractClass : ISomeInterface<EntityA, EntityB>
{
    public abstract EntityA SomeMethod(EntityB entityB);
}

它被称为"抽象接口实现"