Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подмена поведения общего предка / 5 сообщений из 5, страница 1 из 1
14.08.2018, 09:55
    #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
14.08.2018, 10:58
    #39687325
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подмена поведения общего предка
oop_noobВозможно ли (и как?) переопределить поведение общего предка (здесь, для TLabel и TDBText общим предком будет TCustomLabel, и к примеру, нужно добавить в него свойство) с тем, чтобы в текущем модуле все потомки этого предка получили это свойство?

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

есть старый, не очень хроший способ, пишешь наследника от интересующего класса, в нём свои методы и к нему приводишь(кастишь) если они нужны
...
Рейтинг: 0 / 0
15.08.2018, 12:37
    #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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подмена поведения общего предка / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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