Delphi: завершение кода для переопределения базовых методов

В объявлении класса вы можете нажать 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 ответ

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

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

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

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

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

Другие вопросы по тегам