Заставить дочерние классы переопределять метод - PullRequest
23 голосов
/ 07 декабря 2010

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

@interface MyBaseClass : NSObject 
{
}

- (void)performAnAction;

@end

@implementation MyBaseClass

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

@end

Ответы [ 2 ]

46 голосов
/ 07 декабря 2010

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

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

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

1 голос
/ 07 декабря 2010

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

...