Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализован ли абстрактный метод в наследнике, как проверить? 
V
    Опции темы
r00xus
Дата 7.9.2015, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.1.2010

Репутация: нет
Всего: нет



здравствуйте коллеги.

есть проект с кучей хаотично унаследованных друг от друга форм. мне нужно в некоторых формах в методе OnCreate сделать некие манипуляции с интерфейсом. решил добавить в базовый класс абстрактный метод WorkplaceConfig для этих целей, который срабатывает в OnCreate.
Код

unit uform_base;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type

  Tform_Base = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure WorkplaceConfig; virtual; abstract;
  end;

var
  form_Base: Tform_Base;

implementation

{$R *.dfm}

{ Tform_Base }

procedure Tform_Base.FormCreate(Sender: TObject);
begin
WorkplaceConfig; // вот здесь
end;

end.

но вот проблема: метод нужен только в некоторых формах. если не реализовать его в какой-то форме, то естественно вылетит исключение Abstract error. не хочется лазить по всем, смотреть что от чего унаследовано и лепить пустой WorkplaceConfig там где он мене и не нужен вовсе. можно конечно проверить наличие метода через RTTI, но такой подход кажется мне слишком громоздким и некрасивым.
вопрос: можно ли как-то проверить реализован ли абстрактный метод в потомке до его выполнения?
PM MAIL   Вверх
irwin.noteam.2009
Дата 7.9.2015, 11:29 (ссылка)    |    (голосов: 2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











а что мешает в базовой форме его оставить как virtual, просто в базовой форме сделать его пустым и переписывать только в нужных формах, а в ненужных он будет автоматом отрабатывать пустую функцию?
Код

Tform_Base = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure WorkplaceConfig; virtual;
end;

...

procedure Tform_Base.FormCreate(Sender: TObject);
begin
    WorkplaceConfig;
end;

procedure Tform_Base.WorkplaceConfig;
begin
end;


Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
r00xus
Дата 7.9.2015, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 15.1.2010

Репутация: нет
Всего: нет



блин точно! с абстрактным это я уже перемудрил smile
PM MAIL   Вверх
mikeyess
Дата 9.9.2015, 08:53 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 7.1.2014

Репутация: нет
Всего: нет



Добрый день.
При объявлении процедуры сами написали virtual; abstract;, к тому же у Вас процедура procedure Tform_Base.WorkplaceConfig; пустая. Все четко. Объявлен абстрактный класс, который нуждается в переопределении в потомках.
С уважением, Mike

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1113 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.