interface ICanvasTool
{
void Motion(Point newLocation);
void Tick();
}
abstract class CanvasTool_BaseDraw : ICanvasTool
{
protected abstract void PaintAt(Point location);
public override void Motion(Point newLocation)
{
// implementation
}
}
class CanvasTool_Spray : CanvasTool_BaseDraw
{
protected abstract void PaintAt(Point location)
{
// implementation
}
public override void Tick()
{
// implementation
}
}
Это не скомпилировано. Я мог бы добавить абстрактный метод «Tick_Implementation» в CanvasTool_BaseDraw, а затем реализовать ICanvasTool.Tick
в CanvasTool_BaseDraw
с помощью однострочного интерфейса, который просто вызывает Tick_Implementation. Это рекомендуемое решение?Мой абстрактный класс реализует интерфейс, но не реализует некоторые из его методов. Как мне его скомпилировать?
Я не уверен, что вы подразумеваете под «обходным путем», поскольку вы используете интерфейс. Интерфейс - это контракт, и поэтому любой тип, который реализует интерфейс, ДОЛЖЕН придерживаться этого контракта. Это принудительное выполнение компилятором выполняется таким образом, чтобы вызывающие пользователи вашего класса могли знать, что любой тип, реализующий ICanvasTool, имеет эти два метода. – Josh
Да, я * хочу * компилятор, чтобы гарантировать, что любой неабстрактный потомок интерфейса реализует все это. Я просто не хочу, чтобы это имело место для * абстрактных * потомков. –
BTW, Java делает это по-моему. См. Http://stackoverflow.com/questions/197893 –