Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

оператор With   Найти похожие ветки 

 
wild_arg   (2004-10-26 10:50) [0]

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


 
Digitman ©   (2004-10-26 10:54) [1]

никак.

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

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


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

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


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


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

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


 
wild_arg   (2004-10-26 10:59) [4]

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


 
Johnmen ©   (2004-10-26 11:01) [5]

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


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


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

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


 
Gero ©   (2004-10-26 11:09) [7]

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


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

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


 
Digitman ©   (2004-10-26 12:32) [9]


> 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;

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


 
КаПиБаРа ©   (2004-10-26 13:11) [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;


 
SergP ©   (2004-10-26 14:39) [11]


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


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


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

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


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

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


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

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


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


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

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 08:15) [16]

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


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

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


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


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


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

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


 
SergP ©   (2004-10-27 09:06) [19]


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.034 c
14-1098212687
KilkennyCat
2004-10-19 23:04
2004.11.07
Старье, но прикольно


3-1097246118
Step[B.M.]
2004-10-08 18:35
2004.11.07
Как получить выходной параметр процедуры не используя SUSPEND


9-1089764101
Xerx
2004-07-14 04:15
2004.11.07
GLScene


14-1098186072
Herzog
2004-10-19 15:41
2004.11.07
Как разбить на строки...


1-1098708860
barbaris
2004-10-25 16:54
2004.11.07
Hint в зависимости от положения курсора в строках StringGrid