![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
Всем привет!
Представим такую ситуацию
Так вот вопрос: 1. Как определить кто (является ли потомоком TObjectC этот некто) "владеет" fObjA? 2. Если TObjectC - то вызвать метод GetSome. (Если выразиться правильнее, то получит ссылку на данный экземпляр класса TObjectB). Вариант с передачей ссылки в конструкторе не подходит. Или такой вариант вообще невозможен? Это сообщение отредактировал(а) altarasjuk - 4.9.2003, 15:46 -------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
не могу представить ситуацию, когда известно поле класса, но неизвестно, кому оно принадлежит. а если известно кому - то определить тип этого кого-то, простите, [censored34! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] вопрос. видимо я чего-то не догнал. но на всякий случай посмотри справку по методу ClassParent, может, поможет
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
Объекту A не известно.
1 вопрос, действительно протормозил - снимаем. 2 вопрос перефразирую так: Надо получить экземпляр данного класса. -------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
Мне грубо говоря нужен такой результат:
Но только чтобы у конструктора TObjectA был только конструктор по умолчанию ( Create() ). -------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
т.е. fObjA может существовать сам по себе, а может - в качестве поля класса, и во втором случае, если класс является наследником TObjectC, требуется запустить метод этого класса GetSome, я правильно понимаю?
если да, то без Parent ничего здесь сделать невозможно, imho. недаром вся vcl (ну, почти) создаётся с ссылкой на предка. чем не устраивает вариант с передачей ссылки в конструкторе? -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| altarasjuk |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
1)
2)"Владельцу" вовсе не обязательно знать что о нём кто-то что-то знает. Вариант с передачей ссылки - остаётся на крайняк -------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
||||
|
|||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
понятия "конструктор по умолчанию" в vcl не существует, TObject.Create даже не инициализирует данные, он просто отводит память под объект и основное его назначение - вызвать destructor, если create обломится. т.е. можно с совершенно спокойной головой как угодно глумиться над конструкторами наследников TObject. в чём здесь проблема?
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
ну и передавай в него nil. а в TObjectA проверяй, чему у тебя реально равен Owner перед тем, как его юзать. не понимаю, в чём проблема -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
т.е. вызов функции у тебя будет выглядеть так:
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
C таким успехом можно сдлать перегруженный конструктор..... Но опять же в где-то 100 местах нужна ссылка на "владельца". Не очень бы хотелось вылавлить эти места и дописывать скобки с сэлфом..... Ну уж коль нет других вариантов, то что ж. Оставлю для совместимости старый конструктор, и сделаю перегруженный новый......... и чем я думал когда клепал этот класс раньше Но всё равно должен быть в природе какой-тоалгоритм, чтобы понять откуда был вызван конструктор. -------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Неа, не должен. Нет, в принципе он, конечно, есть - можно прочитать call stack и выудить оттуда место откуда функция была вызвана, а так же из стека вытащить нужный тебе параметр. Но вряд ли ты этим захочешь заниматься. -------------------- Волны гасят ветер... |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
-------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |