powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как корректно перекрыть свойство предка?
14 сообщений из 14, страница 1 из 1
Как корректно перекрыть свойство предка?
    #39908397
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем имеется класс:
Код: pascal
1.
2.
3.
4.
5.
  TCollector = class(TThread)
   private
    ACollection: TQueue<String>;
  ...
  end;

и есть наследник, где свойство ACollection предка перекрыто новым типом:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  TFileCollector = class(TCollector)
  private
    ACollection: TQueue<TFileInfo>;
  ...
  end;

constructor TCollector.Create;
begin
 inherited Create(True);
 ACollection := TQueue<String>.Create;
 ...
end;

constructor TFileCollector.Create(FilePath: String; FileMask: array of String; Options: TFileCollectorOptions);
begin
 inherited Create;
 ACollection := TQueue<TFileInfo>.Create;
 ...
end;


По идее у меня должна быть утечка памяти для TCollector.ACollection или нет?
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908400
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ
По идее у меня должна быть утечка памяти для TCollector.ACollection или нет?
Нет. Разве TCollector.ACollection не уничтожается в деструкторе TCollector?
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908405
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не увидел в коде СВОЙСТВА
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908415
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
26.12.2019 13:00, Страдалецъ пишет:
> По идее у меня должна быть утечка памяти для TCollector.ACollection или нет?

не парься.
ты ж в деструкторе её освобождаешь (надеюсь)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908446
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ
Как корректно перекрыть свойство предка?

Если коротко, то наиболее корректный вариант -

Код: pascal
1.
2.
3.
TCollector<T> = class(TThread)
private
  ACollection: TQueue<T>;
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908466
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ

Код: pascal
1.
2.
3.
4.
5.
  TCollector = class(TThread)
   private
    ACollection: TQueue<String>;
  ...
  end;

и есть наследник, где свойство ACollection предка перекрыто новым типом:
Код: pascal
1.
2.
3.
4.
5.
  TFileCollector = class(TCollector)
  private
    ACollection: TQueue<TFileInfo>;
  ...
  end;


У экземпляра класса TFileCollector будет свой ACollection: TQueue<TFileInfo>; и наследуемый ACollection: TQueue<String>;
Это так и должно быть?
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908476
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov
Страдалецъ

Код: pascal
1.
2.
3.
4.
5.
  TCollector = class(TThread)
   private
    ACollection: TQueue<String>;
  ...
  end;

и есть наследник, где свойство ACollection предка перекрыто новым типом:
Код: pascal
1.
2.
3.
4.
5.
  TFileCollector = class(TCollector)
  private
    ACollection: TQueue<TFileInfo>;
  ...
  end;


У экземпляра класса TFileCollector будет свой ACollection: TQueue<TFileInfo>; и наследуемый ACollection: TQueue<String>;
Нет. Не будет. Начнем с того, что ACollection это приватное поле.
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908481
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А закончим тем, что без "хакерского способа" TFileCollector не получит доступ к родительскому ACollection из-за совпадения имен.
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908526
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд
А закончим тем, что без "хакерского способа" TFileCollector не получит доступ к родительскому ACollection из-за совпадения имен.
Если все в одном модуле, то должно сработать
Код: pascal
1.
inherited ACollection
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908528
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд
Нет. Не будет. Начнем с того, что ACollection это приватное поле.


Неточно выразился: экземпляр класса TFileCollector будет содержать наследуемое поле ACollection от класса TCollector.
Про доступ к наследуемому полю речи нет.

Ну, и если оба класса описаны в одном модуле, приватностью можно пренебречь:
Код: pascal
1.
  TCollector( Self ).ACollection;
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908529
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Если все в одном модуле, то должно сработать
Код: pascal
1.
inherited ACollection


У меня с приватным полем inherited не прокатило (Delphi XE7):
Код: powershell
1.
[dcc32 Error] Unit11.pas(69): E2096 Method identifier expected
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908537
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Квейд
А закончим тем, что без "хакерского способа" TFileCollector не получит доступ к родительскому ACollection из-за совпадения имен.
Если все в одном модуле, то должно сработать
Код: pascal
1.
inherited ACollection

это работает для свойств, для полей не катит
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908541
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд
для полей не катит
Ну тогда
Код: pascal
1.
TCollector(Self).ACollection
...
Рейтинг: 0 / 0
Как корректно перекрыть свойство предка?
    #39908617
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в общем-то мне как раз не нужно это поле предка, т.к. я его в наследнике перекрываю, но по факту создается два поля с одинаковым именем от предка в неявном виде и в явном виде у наследника. Память то освободится, после завершения наследника, но правильнее все-же делать по варианту от softwarer, без этих фантомов.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как корректно перекрыть свойство предка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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