| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как получить "Владельца" |
| Автор: altarasjuk 4.9.2003, 15:44 | ||
| Всем привет! Представим такую ситуацию
Так вот вопрос: 1. Как определить кто (является ли потомоком TObjectC этот некто) "владеет" fObjA? 2. Если TObjectC - то вызвать метод GetSome. (Если выразиться правильнее, то получит ссылку на данный экземпляр класса TObjectB). Вариант с передачей ссылки в конструкторе не подходит. Или такой вариант вообще невозможен? |
| Автор: x77 4.9.2003, 16:03 |
| не могу представить ситуацию, когда известно поле класса, но неизвестно, кому оно принадлежит. а если известно кому - то определить тип этого кого-то, простите, [censored34! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] вопрос. видимо я чего-то не догнал. но на всякий случай посмотри справку по методу ClassParent, может, поможет |
| Автор: altarasjuk 4.9.2003, 16:21 |
| Объекту A не известно. 1 вопрос, действительно протормозил - снимаем. 2 вопрос перефразирую так: Надо получить экземпляр данного класса. |
| Автор: altarasjuk 4.9.2003, 16:28 | ||
Мне грубо говоря нужен такой результат:
Но только чтобы у конструктора TObjectA был только конструктор по умолчанию ( Create() ). |
| Автор: x77 4.9.2003, 16:34 |
| т.е. fObjA может существовать сам по себе, а может - в качестве поля класса, и во втором случае, если класс является наследником TObjectC, требуется запустить метод этого класса GetSome, я правильно понимаю? если да, то без Parent ничего здесь сделать невозможно, imho. недаром вся vcl (ну, почти) создаётся с ссылкой на предка. чем не устраивает вариант с передачей ссылки в конструкторе? |
| Автор: altarasjuk 4.9.2003, 16:38 | ||||
1)
2)"Владельцу" вовсе не обязательно знать что о нём кто-то что-то знает. Вариант с передачей ссылки - остаётся на крайняк |
| Автор: x77 4.9.2003, 16:38 |
| понятия "конструктор по умолчанию" в vcl не существует, TObject.Create даже не инициализирует данные, он просто отводит память под объект и основное его назначение - вызвать destructor, если create обломится. т.е. можно с совершенно спокойной головой как угодно глумиться над конструкторами наследников TObject. в чём здесь проблема? |
| Автор: x77 4.9.2003, 16:39 | ||
ну и передавай в него nil. а в TObjectA проверяй, чему у тебя реально равен Owner перед тем, как его юзать. не понимаю, в чём проблема |
| Автор: x77 4.9.2003, 16:49 | ||
т.е. вызов функции у тебя будет выглядеть так:
|
| Автор: altarasjuk 5.9.2003, 12:11 | ||
C таким успехом можно сдлать перегруженный конструктор..... Но опять же в где-то 100 местах нужна ссылка на "владельца". Не очень бы хотелось вылавлить эти места и дописывать скобки с сэлфом..... Ну уж коль нет других вариантов, то что ж. Оставлю для совместимости старый конструктор, и сделаю перегруженный новый......... и чем я думал когда клепал этот класс раньше Но всё равно должен быть в природе какой-тоалгоритм, чтобы понять откуда был вызван конструктор. |
| Автор: Fantasist 5.9.2003, 17:48 | ||
Неа, не должен. Нет, в принципе он, конечно, есть - можно прочитать call stack и выудить оттуда место откуда функция была вызвана, а так же из стека вытащить нужный тебе параметр. Но вряд ли ты этим захочешь заниматься. |
| Автор: altarasjuk 6.9.2003, 20:08 | ||
|