Delphi: завершение кода для переопределения базовых методов - PullRequest
1 голос
/ 18 сентября 2009

В объявлении класса вы можете нажать Ctrl + Space, чтобы получить список виртуальных методов в базовом классе, которые вы можете переопределить.

Этот список, похоже, очень ограничен. Ex.

 TMyBaseClass = class(TInterfacedObject)
 protected
   procedure mymethod; virtual;
 end;

 TMyClass = class(TMyBaseClass)
 protected
   {Ctrl+Space here...}
 end;

В TMyClass я получаю методы из TInterfacedObject и TObject, но не из TMyBaseClass. Почему это?

-Vegar

РЕДАКТИРОВАТЬ: Забыли мою версию Delphi ... Я использую 2007.

1 Ответ

6 голосов
/ 18 сентября 2009

Потому что иногда эти инструменты IDE работают, а иногда нет (и это не проблема, которая уникальна для Delphi / RAD Studio).

Например, если у вас есть другие ожидающие редактирования, которые означают, что IDE не может адекватно проанализировать ваш источник вплоть до текущей точки вставки, то, вероятно, такие вещи будут «сломаны».

В таких случаях я лично пытаюсь быстро нажать Ctrl + F9, чтобы увидеть, есть ли ошибки компиляции, о которых я, возможно, не знаю. 9 из 10 есть, и исправление этих ошибок исправляет поведение кода.

При дословном воспроизведении вашего примера в новом модуле я получаю «mymethod» в моем списке завершения кода, как и ожидалось, поэтому возможно, что в вашем реальном случае ваш базовый класс и ваш производный класс фактически разделены другим кодом, возможно даже в отдельных модулях, и что этот другой код содержит ошибки «между» двумя объявлениями в то время, когда вы пытаетесь вызвать завершение кода?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...