У меня есть интерфейс с именем IFish
. Я хочу получить его с абстрактным классом (WalkingFishCommon
), который обеспечивает неполную реализацию, так что классы, полученные из WalkingFishCommon
, не должны реализовывать свойство CanWalk
:
interface IFish
{
bool Swim();
bool CanWalk { get; }
}
abstract class WalkingFishCommon : IFish
{
bool IFish.CanWalk { get { return true; } }
// (1) Error: must declare a body, because it is not marked
// abstract, extern, or partial
// bool IFish.Swim();
// (2) Error: the modifier 'abstract' is not valid for this item
// abstract bool IFish.Swim();
// (3): If no declaration is provided, compiler says
// "WalkingFishCommon does not implement member IFish.Swim()"
// {no declaration}
// (4) Error: the modifier 'virtual' is not valid for this item
// virtual bool IFish.Swim();
// (5) Compiles, but fails to force derived class to implement Swim()
bool IFish.Swim() { return true; }
}
Я еще не обнаружил, как сделать компилятор счастливым, но все еще добивается цели принуждения классов, полученных от WalkingFishCommon, для реализации метода Swim()
. Особенно непонятным является дельта между (1) и (2), где компилятор чередуется между жалобами на то, что Swim()
не обозначен абстрактно, и в следующем дыхании жалуется, что он не может быть помечен как абстрактный. Интересная ошибка!
Любая помощь?