我有一个如下所示的界面:
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);
}
答案 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;。