Подтвердить что ты не робот

Принудительные классы для переопределения метода

Как я могу сделать так, чтобы любой класс, который наследует мой базовый класс, вынужден переопределить определенный метод? Я не хочу использовать протокол, потому что это не будет автоматизировать это поведение.

@interface MyBaseClass : NSObject 
{
}

- (void)performAnAction;

@end

@implementation MyBaseClass

- (void)performAnAction
{
    @throw([NSException exceptionWith...]);
}

@end
4b9b3361

Ответ 1

Как именно вы имеете в виду, заставить их переопределить его? Если вы просто реализуете родительский метод следующим образом:

- (void)performAction {
    NSAssert(NO, @"The method %@ in %@ must be overridden.",
         NSStringFromSelector(_cmd), NSStringFromClass([self class]));
}

тогда он выкинет исключение во время выполнения, если дочерний класс не сможет его переопределить. К сожалению, для компиляции не существует способа обеспечить соблюдение этого правила.

Ответ 2

Вы можете просто выбросить исключение. Пока это хорошо документировано, IMO это разумное использование исключений, поскольку это действительно ошибка программирования.