Общее программирование, абстрактный класс вызывает метод, о котором он не «знает» - AS3 - PullRequest
0 голосов
/ 18 ноября 2011

Я работаю в AS3.У нас есть абстрактный класс, назовите его MyAbstractClass (я не думаю, что он действительно абстрактный, но мы ТОЛЬКО расширяем его).Классы, расширяющие этот класс, также реализуют интерфейс, назовите его IMyInterface.IMyInterface имеет функцию updateView.

Я хочу, чтобы одна из моих функций в MyAbstractClass вызывала updateView, но, конечно, MyAbstractClass не имеет функции updateView, поэтому он не будет компилироваться.Я пытаюсь делать что-то плохое?Есть ли простой способ сделать то, что я хочу?

Должен ли я переместить updateView в MyAbstractClass и просто переопределить его везде, где мне нужно?спасибо

Ответы [ 3 ]

2 голосов
/ 18 ноября 2011

Да, это звучит так, как будто это должен быть абстрактный метод в MyAbstractClass.Если все реализации также реализуют IMyInterface, звучит так, как будто вы должны объявить, что MyAbstractClass также объявит это.Разумеется, для того и другого потребуется, чтобы вы * MyAbstractClass правильно аннотация.

По сути, вы должны спросить себя: логически, сможете ли вы лечить каждый набор MyAbstractClassкак IMyInterface?Должны ли они все иметь updateView?Имеет ли это смысл для MyAbstractClass или они логически разделены?

0 голосов
/ 18 ноября 2011

Когда вы хотите вызвать метод интерфейса в своем «абстрактном» классе, вы можете сделать следующее:

if(this is IMyInterface) IMyInterface(this).updateView();

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

0 голосов
/ 18 ноября 2011

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

...