对实现通用接口的抽象类执行“受保护的抽象覆盖”

时间:2015-07-28 14:53:26

标签: c#

我有一个如下所示的界面:

public interface ISomeInterface<out TEntityA, TEntityB> 
    where TEntityA : ISomeEntityA
    where TEntityB : ISomeEntityB
{
    TEntityA SomeMethod(TEntityB entityB);
}  

另一方面,我有一个实现此接口的抽象类,因此,使用intellisense实现看起来像这样:

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

由于 EntityA EntityB 分别是 ISomeEntityA ISomeEntityB 的具体实现,似乎我'我被迫抛出一个 NotImplementedException ,这看起来很脏。

由于您在覆盖方法时无法更改签名,我的问题是:“是否有办法执行'受保护的抽象覆盖'以强制执行 SomeMethod < / em>在 BaseAbstractClass 的继承类中?“

为了更加清晰,我想做的就是这样(它不会编译)

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

2 个答案:

答案 0 :(得分:2)

为什么不把它称为其他东西?

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

    public EntityA SomeMethod(EntityB entityB) 
    {
        return SomeMethodImpl(entityB);
    }
}

答案 1 :(得分:1)

简单地摆脱override。这将编译:

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

它被称为&#34;抽象接口实现&#34;。