Главная страница
    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.039 c
1-1098520923
Ramon
2004-10-23 12:42
2004.11.07
Динамически созданные пункты меню


14-1098029285
Gero
2004-10-17 20:08
2004.11.07
Всем сисадминам


1-1098192906
Dr. Genius
2004-10-19 17:35
2004.11.07
Неповрежденные части файлов с диска A:


1-1098644589
S-Lok
2004-10-24 23:03
2004.11.07
Использование dll в html-файле


3-1097408305
alextov
2004-10-10 15:38
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский