powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подмена поведения общего предка
5 сообщений из 5, страница 1 из 1
Подмена поведения общего предка
    #39687277
oop_noob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Широко известна подмена класса на лету:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
type
  TLabel = class(Vcl.StdCtrls.TLabel)
  private
    ...
  public
    ...
  end;
  
  TForm1 = class(TForm)
  ...


В итоге, начиная с этих строк, поведение что компонентов на форме, что создаваемых на лету экземпляров, в модуле меняется. Но меняется поведение только явно указанного класса, здесь это TLabel. Если нужно аналогично поменять поведение, скажем, TDBText, то для него вышеприведенный код потребуется дублировать.
Возможно ли (и как?) переопределить поведение общего предка (здесь, для TLabel и TDBText общим предком будет TCustomLabel, и к примеру, нужно добавить в него свойство) с тем, чтобы в текущем модуле все потомки этого предка получили это свойство?
...
Рейтинг: 0 / 0
Подмена поведения общего предка
    #39687325
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oop_noobВозможно ли (и как?) переопределить поведение общего предка (здесь, для TLabel и TDBText общим предком будет TCustomLabel, и к примеру, нужно добавить в него свойство) с тем, чтобы в текущем модуле все потомки этого предка получили это свойство?

Код: pascal
1.
TCustomLabelHelper = class helper for TCustomLabel
...
Рейтинг: 0 / 0
Подмена поведения общего предка
    #39687955
oop_noob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, для моей задачи то, что надо.
А так, из чистого любопытства - без хелперов задача в описанном виде не решается?
...
Рейтинг: 0 / 0
Подмена поведения общего предка
    #39687990
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oop_noobСпасибо, для моей задачи то, что надо.
А так, из чистого любопытства - без хелперов задача в описанном виде не решается?

есть старый, не очень хроший способ, пишешь наследника от интересующего класса, в нём свои методы и к нему приводишь(кастишь) если они нужны
...
Рейтинг: 0 / 0
Подмена поведения общего предка
    #39688025
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oop_noob,

traits/mixins - https://en.wikipedia.org/wiki/Mixin

в рамках же Delphi и чистого классового ООП этим занимались JediVCL

1) объявляем интерфейс с добавленными свойствами
2) создаем класс, реализующий этот интерфейс
3) создаём потомков от нужных VCL-классов, который
3.1) отключают для себя счетчик ссылок в интерфейсах
3.2) реализуют этот интерфейс
3.3) внутри себя имеют поле с объектом нового класса, создают, настраивают и удаляют его
3.4) реализацию этого нового общего интерфейса делегируют этому внутреннему объекту
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подмена поведения общего предка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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