Форум "Delphi" (архив)
Паскаль, Делфи
Передача переменных в процедурукидаю на форму табле1, датасоурсе1, дбгрид1... объявляю новую процедуру: procedure aaa(tab: TTable); вызываю процедуру по нажатию на ннекую кнопочку: aaa(table1); сама процедура ааа Procedure tform1.aaa(tab: TTable) begin table1.edit; table1.fieldbyname('pole').asstring := 'dfgd'; table1.post; end; Вопрос: почему я могу изменить строку в табле1 если я передаю локальную копию табле1, или это для классов не работает???
|
|
#1
maximus
© 07.06.05 08:12:11
прошу прощения процедура: Procedure tform1.aaa(tab: TTable) begin tab.edit; tab.fieldbyname('pole').asstring := 'dfgd'; tab.post; end; |
|
#2
dmitry501
07.06.05 08:32:09
#1 maximus © (07.06.05 8:12) Потому что параметры передаются по ссылке, а не по значению. |
|
#3 Vlad © 07.06.05 08:35:24
мне кажется, что там передается не копия, а ссылка на таблу |
|
#4
maximus
© 07.06.05 08:39:36
procedure aaa(tab: TTable); procedure aaa(var tab: TTable); procedure aaa(const tab: TTable); без разницы... все равно ощущение такое что получается по ссылке!!! |
|
#5 Vlad © 07.06.05 08:55:53
ктр+альт+с говорит что код он во всех случаях одинаков |
|
#6 Vlad © 07.06.05 08:56:24
настройки компилятора по умолчанию |
|
#7
maximus
© 07.06.05 09:08:24
Vlad#5#6 - поясни. для обычных переменных (string, integer...) все работает как и должно... а от для ttable почему то... |
|
> если я передаю локальную копию табле1 для того чтоб передавать копию, ее надо сначало создавать. Если новый объект не создается, значит мы уже имеем дело с указателем на оригинал. Так где у тебя tab := TTable.Create(....); ?Нету. 1)Значит это не копия 2)Даже добавляя строку в копии, ты добавляешь ее в оригинал. Физически это ведь одна и та же таблица. |
|
#9 Vlad © 07.06.05 09:24:16
>#7 maximus © 07.06.05 09:08:24 > Физически это ведь одна и та же таблица. которую ты бросил на форму > Vlad#5#6 - поясни. генерацию исп. кода проверяют заглянув в окошко компилятора, ставится точка останова, и когда программа останавливается, жмут ктр+альт+с, и смотрят как будет преобразован *.раз в маш.код иногда компилятор делает как он считает нужным, а не как задумано. Это оптимизация. но, см. Дипа, тут даже не оптимизация, а просто так надо :) в твоем случае во всех разах одинаков, смотрел сам |
|
#10
maximus
© 07.06.05 11:10:38
#8 deep 2)Даже добавляя строку в копии, ты добавляешь ее в оригинал. Физически это ведь одна и та же таблица. тогда выходит что с самого начала я делал все правильно? |
|
> тогда выходит что с самого начала я делал все правильно? откуда нам знать? если передать переменную -- то направильно. Ты передал ссылку на объект. Если добавить строку в таблицу -- то правильно. |
Тема находится в архиве
Написать ответ |
|
