Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

оператор With [D6]


wild_arg ©   (2004-10-26 10:50:00) 

Как внутри оператора with получить ссылку на сам объект, по которому строим оператор?
Пример:
with TMyObject.Create do begin
...
 MyProc({здесь, типа, надо передать ссылку на созданный объект})
...
end;


SergP   (2004-10-27 09:06:00) [1]


> [14] КаПиБаРа ©   (27.10.04 05:52)
> SergP ©   (26.10.04 14:39) [11]
> Предложеные примеры были куда сложнее чем если бы
>
> Что сложного в КаПиБаРа ©   (26.10.04 13:11) [10]? Или такого
> примера не предлагали?


Вроде бы не предлагали... хотя дело не в этом.
Дело в том что я не говорил что что-то сложно,
я говорил что что-то одно сложнеечем другое.
Т.е. речь шла не об абсолютной сложности а об относительной.

пример приведенный Вами простой, там действительно ничего сложного нет :-)
но он сложнее чем если использовать дополнительную переменную, хотя бы по кол-ву строк кода.


SergP   (2004-10-27 09:00:00) [2]


> [14] КаПиБаРа ©   (27.10.04 05:52)
> SergP ©   (26.10.04 14:39) [11]
> Предложеные примеры были куда сложнее чем если бы
>
> Что сложного в КаПиБаРа ©   (26.10.04 13:11) [10]? Или такого
> примера не предлагали?


Вроде бы не предлагали... хотя дело не в этом.
Дело в том что я не говорил что что-то сложно,
я говорил что что-то одно сложнеечем другое.
Т.е. речь шла не об абсолютной сложности а об относительной.

пример приведенный Вами простой, там действительно ничего сложного нет :-)
но он сложнее чем если использовать дополнительную переменную, хотя бы по кол-ву строк кода.


КаПиБаРа   (2004-10-27 08:16:00) [3]

Ученик   (27.10.04 8:15) [16]
Похоже одни книжки читаем :)


Ученик   (2004-10-27 08:15:00) [4]

Сорри :-) КаПиБаРа ©   (26.10.04 13:11) [10]


Ученик   (2004-10-27 08:13:00) [5]

type
 TClassTypeMethod = function: TClass of object;

function GetSelf(aClassType: TClassTypeMethod): Pointer;
begin
 Result := TMethod(aClassType).Data
end;

with TMyObject.Create do begin
 ...
 MyProc(GetSelf(ClassType));
 ...
end;


КаПиБаРа   (2004-10-27 05:52:00) [6]

SergP ©   (26.10.04 14:39) [11]
Предложеные примеры были куда сложнее чем если бы


Что сложного в КаПиБаРа ©   (26.10.04 13:11) [10]? Или такого примера не предлагали?


Германн   (2004-10-27 04:10:00) [7]

2 Alekc   (27.10.04 00:19) [12]
Имхо, тут главное "Время жизни" ссылки и "Область видимости ссылки".


Alekc   (2004-10-27 00:19:00) [8]

with TMyObject.Create do begin
...
 MyProc(TMyObject(TMethod({@}Create).Data));
// Насчёт @ не уверен....
...
end;


SergP   (2004-10-26 14:39:00) [9]


>  [2] Плохиш ©   (26.10.04 10:54)
> Примерно весной это здесь уже обсуждалось :-)
> Может быть кто-нибуть это для тебя и поищет.


Ага... Я тогда спрашивал...
Но у меня была ситуация где в with был довольно большой код, и только в одном месте как назло требовалась ссылка (указатель) на сам объект...
Просто хотелось "красиво" написать код
Предложеные примеры были куда сложнее чем если бы я сделал все с дополнительной переменной.
Вобщем я тогда решил не мучаться и добавил переменную....


КаПиБаРа   (2004-10-26 13:11:00) [10]

type
 TProc = procedure of object;

function GetSelf(Proc: TProc): TObject;
begin
 Result := TObject(TMethod(proc).Data);
end;

with TMyObject.Create do begin
...
MyProc(GetSelf(Free))
...
end;


Digitman   (2004-10-26 12:32:00) [11]


> wild_arg   (26.10.04 10:59) [4]


тебе Плохиш ©   (26.10.04 10:57) [3] верно говорит - есть и иное решение - удаление гланд через причинное место ..

желаешь испытать ? объяви в своем классе TMyObject что-то вроде публ.метода GetInstance и реализуй его примерно так :

function TMyObject.GetInstance: TMyObject;
begin
Result := Self;
end;

тогда "хирургическая операция" сможет выглядеть тем самым образом, который ты столь жаждешь:

with TMyObject.Create do begin
...
MyProc(GetInstance)
...
end;

вопросы тебе "на засыпку" к рассуждениям во время викенда :
- чем тебе это грозит ?
- стоит ли "овчинка выделки" ?


ssk   (2004-10-26 12:19:00) [12]

... и констант!


Gero   (2004-10-26 11:09:00) [13]

Даешь написание программ без переменных!


Плохиш   (2004-10-26 11:02:00) [14]


> wild_arg   (26.10.04 10:59) [4]
> блин
> заводить дополнительную переменную.... оцтой!

Да! А во всех ошибках Билл Гейтц виноват


Johnmen   (2004-10-26 11:01:00) [15]

Да весь программинг - полный оцтой.


wild_arg   (2004-10-26 10:59:00) [16]

блин
заводить дополнительную переменную.... оцтой!
:)


Плохиш   (2004-10-26 10:57:00) [17]


> Digitman ©   (26.10.04 10:54) [1]

В том обсуждении был пример удаления гланд не через рот ;-) Люди же лёгких путей не ищут :-)


Digitman   (2004-10-26 10:54:00) [18]

никак.

решение обычное :

MyObject := TMyObject.Create;
with MyObject do begin
...
MyProc(MyObject);
...
end;


Плохиш   (2004-10-26 10:54:00) [19]

Примерно весной это здесь уже обсуждалось :-)
Может быть кто-нибуть это для тебя и поищет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо