У меня есть базовый тип объекта: TBServiceBookings, а затем я получен другой тип объекта от: TBServiceQuotesDelphi - вниз литье объект не вызывается метод базового
Так что, когда создаются моя форма решает, какой объект использовать , В этом случае я создал производный объект.
if fScreenType = ST_NewAppointment then
fBookingObject := TBServiceBookings.CreateServiceBookings(nil,botSingle)
else
fBookingObject := TBServiceQuotes.CreateServiceQuotes(nil,botSingle);
На каком-то этапе я хочу вызвать метод базового класса. Поэтому я передал производный объект базовому типу и вызвал его метод, но он продолжает переходить к производному методу, которого я не хочу.
Я пробовал:
1) fBookingObject := TBServiceBookings(fBookingObject);
fBookingObject.SetupNewAppointmentScreen;
2)
TBServiceBookings(fBookingObject).SetupNewAppointmentScreen;
3)
(fBookingObject as TBServiceBookings).SetupNewAppointmentScreen;
Что мне не хватает? Почему производный метод вызывается каждый раз, даже несмотря на то, что я специально отключил вызов базового метода?
Единственное, что у меня осталось - это создать новую переменную базового типа, а затем продолжить с этим. Но у меня уже есть переменная формы, которая является моим объектом, я просто хочу вызвать метод базового класса.
Любая помощь приветствуется!
Ваш код является неполным, поэтому мы не можем увидеть, правильно ли установлен «SetupNewAppointmentScreen» как «виртуальный» в базовом классе и «переопределить» в дочернем классе –
. Я предполагаю, что метод, который вы называете, является виртуальным (или динамическим). Затем он всегда вызывает метод * actual * type, а не типа * объявленного *. Кастинг не меняет этого. Тот факт, что вы хотите назвать поведение базового класса, означает, что вы, вероятно, должны пересмотреть свой дизайн. –
@Stefan: тогда он будет вести себя так, как он хочет, или имеет поведение самого производного класса, который сделал это правильно. Если он виртуальный и правильно помечен как переопределяющий, он делает то, что он описывает. Но необходимость называть поведение базового класса - это ИМО, запах кода. –