Классы в Дельфи

Corrector

допустим, есть два класса, TMyClass1 и TMyClass2. Один из классов является полем другого класса:
type TMyClass1 = record
public
MyClass2: TMyClass2
end;
Из TMyClass1 я могу обратиться к полям MyClass2, а как сделать наоборот? вызвать из MyClass2 поля TMyClass1 ?

maggi14

во-первых, никак. Храни в TMyClass2 указатель на объект TMyClass1
Во-вторых, то, что ты написал, это не класс, а запись.

gopnik1994

1) прочитать хоть одну книжку по ООП
2) понять, какую ерунду ты написал
3) уйти в монастырь

Corrector

конечно, я быстро набирал, ошибся. Имеется ввиду =class
Может быть, , ты знаешь ответ на вопрос? Если отправляешь к книжке, скажи, в каком разделе копать

gopnik1994

см п.2
похоже ты путаешь поле и inner class, которых в делфе вроде нету (если в .NET не добавили - я там еще не копался)

Corrector

хм, я не слышал выражение "inner class", но такие конструкции

TForm1 = class (TForm)
...
Button1: TButton
...

есть даже в самых первых версиях дельфи. Это иннер класс или нет?
Далее, п.2. В каком месте я написал ерунду? То, что в принципе невозможно из реализации TMyClass2 "видеть" поля и методы TMyClass1, в котором он содержится?

maggi14

как ты себе это представляешь? откуда внутренний класс вообще должен догадываться, куда его приспичет засунуть очередному программеру?

Corrector

 
как ты себе это представляешь? откуда внутренний класс вообще должен догадываться, куда его приспичет засунуть очередному программеру?

Пример: MyButton1: TMyButton находится на MyForm1: TMyForm
Где-то в реализации класса TMyButton = class (TButton) пишем:
procedure TMyButton.SomeProc;
begin
  (Self.Parent as TForm).Caption := 'Привет любимому папе от сына!'
end;

Соответственно, при создании экземпляра класса TMyForm=class(TForm) надо указать:

procedure TMyForm.Create;
begin
...
MyButton := TMyButton.Create(self);
  MyButton1.Parent := self;
  MyButton1.Caption := 'Привет сыну от папочки';
end;

Что скажешь?

maggi14

потому что в классе TButton есть элемент Parent. Если ты в классе TMyClass2 сделаешь такое поле, а при инициализации объекта MyClass2, скажем, из конструктора класса TMyClass1 не забудешь передать в это поле указатель Self, то и ты сможешь обращаться к хозяину.
Кстати, по секрету: не помню, как это обычно делается в Дельфи, но вовсе не обязательно в классе TForm1 должен быть объект TMyButton1. Parent кнопки - это вовсе не родительский класс, а форма, на которую эту кнопку ткнули. Может, в Delphi случайно эти две вещи (класс-контейнер и форма-контейнер) совпадают, но в MFC, например, это не так.

Corrector

все, уже сделал в классе TMyClass2

TMyClass2 = class
  Papa: TObject;

Cработало.
Owner - тот, кто отвечает за освобождение памяти своего сына
Parent - это компонент, на котором визуализируется сынок.
я уже подумывал, можно ли реализовать через Интерфейсы..
Оставить комментарий
Имя или ник:
Комментарий: