|
|
|
Подмена поведения общего предка
|
|||
|---|---|---|---|
|
#18+
Широко известна подмена класса на лету: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В итоге, начиная с этих строк, поведение что компонентов на форме, что создаваемых на лету экземпляров, в модуле меняется. Но меняется поведение только явно указанного класса, здесь это TLabel. Если нужно аналогично поменять поведение, скажем, TDBText, то для него вышеприведенный код потребуется дублировать. Возможно ли (и как?) переопределить поведение общего предка (здесь, для TLabel и TDBText общим предком будет TCustomLabel, и к примеру, нужно добавить в него свойство) с тем, чтобы в текущем модуле все потомки этого предка получили это свойство? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 09:55 |
|
||
|
Подмена поведения общего предка
|
|||
|---|---|---|---|
|
#18+
oop_noobВозможно ли (и как?) переопределить поведение общего предка (здесь, для TLabel и TDBText общим предком будет TCustomLabel, и к примеру, нужно добавить в него свойство) с тем, чтобы в текущем модуле все потомки этого предка получили это свойство? Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 10:58 |
|
||
|
Подмена поведения общего предка
|
|||
|---|---|---|---|
|
#18+
Спасибо, для моей задачи то, что надо. А так, из чистого любопытства - без хелперов задача в описанном виде не решается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 11:38 |
|
||
|
Подмена поведения общего предка
|
|||
|---|---|---|---|
|
#18+
oop_noobСпасибо, для моей задачи то, что надо. А так, из чистого любопытства - без хелперов задача в описанном виде не решается? есть старый, не очень хроший способ, пишешь наследника от интересующего класса, в нём свои методы и к нему приводишь(кастишь) если они нужны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 12:11 |
|
||
|
Подмена поведения общего предка
|
|||
|---|---|---|---|
|
#18+
oop_noob, traits/mixins - https://en.wikipedia.org/wiki/Mixin в рамках же Delphi и чистого классового ООП этим занимались JediVCL 1) объявляем интерфейс с добавленными свойствами 2) создаем класс, реализующий этот интерфейс 3) создаём потомков от нужных VCL-классов, который 3.1) отключают для себя счетчик ссылок в интерфейсах 3.2) реализуют этот интерфейс 3.3) внутри себя имеют поле с объектом нового класса, создают, настраивают и удаляют его 3.4) реализацию этого нового общего интерфейса делегируют этому внутреннему объекту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 12:37 |
|
||
|
|

start [/forum/search_topic.php?author=rinat_TS&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 730ms |
| total: | 1057ms |

| 0 / 0 |
