powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Переопределение метода в хелпере
2 сообщений из 2, страница 1 из 1
Переопределение метода в хелпере
    #39713237
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой набор классов
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
TBase = class
  function Test: string; virtual;
end;

TBaseChild = class(TBase)
  function Test: string; override;
end;

TChild1 = class(TBaseChild)
  function Test: string; override;
end;

TChild2 = class(TBaseChild)
  function Test: string; override;
end;

function TBase.Test: string; 
begin
  Result := 'TBase';
end;

function TBaseChild.Test: string; 
begin
  Result := 'TBaseChild';
end;

function TChild1.Test: string; 
begin
  Result := 'TChild1';
end;

function TChild2.Test: string; 
begin
  Result := 'TChild2';
end;

Для модификации классы недоступны. Мне нужно переопределить метод в классе TChild1. Пишу
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TBaseChildHelper = class helper for TBaseChild
  function Test: string;
end;

function TBaseChildHelper.Test: string;
begin
  if Self is TChild1 then
    Result := 'TBaseChildHelper Child1'
  else
    Result := inherited Test;
end;

и вызов
Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
  Obj: TBaseChild;
  Str: string;
begin
   ..........
  Str := Obj.Test;
end;

Проблема в строчке
Код: pascal
1.
Result := inherited Test;


Для всех классов отличных от TChild1 вызывается метод TBase.Test, а нужно вызвать метод своего класса.

Если написать так
Код: pascal
1.
Result := Self.Test;

то рекурсия и стек оверфлоу.

Можно придумать выход из ситуации?

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Переопределение метода в хелпере
    #39713243
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вывернулся вот так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
TBaseChildBaseHelper = class helper for TBaseChild
private
  function ObjTest: string;
end;

TBaseChildHelper = class helper(TBaseChildBaseHelper) for TBaseChild
  function Test: string;
end;

function TBaseChildBaseHelper.ObjTest: string;
begin
  Result := Test;  // Вызываем метод класса
end;

function TBaseChildHelper.Test: string;
begin
  if Self is TChild1 then
    Result := 'TBaseChildHelper Child1'
  else
    Result := ObjTest;
end;
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Переопределение метода в хелпере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]