Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

оператор 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.04 c
14-1098247284
aVast
2004-10-20 08:41
2004.11.07
Нас назвали алкоголиками...


14-1097532323
DeMoN-777
2004-10-12 02:05
2004.11.07
Сайт => Игры для мобильников


3-1096963548
neat
2004-10-05 12:05
2004.11.07
DBGrid: постраничный вывод


14-1098273465
Ega23
2004-10-20 15:57
2004.11.07
Приятель только что приятель прислал :о)


1-1097967106
ranetka
2004-10-17 02:51
2004.11.07
Диманический массив как поле класса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский