![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сравнение объектов [D5, Win2k]
AleX200411 © (2004-11-22 11:00:00)Всем добрый день! Такой вопрос: как правильно сравнить два объекта в Delphi, если обычное
if object1 <> object2 then
begin
//...
end;
не работает?
Может сужествует более корректное сравнение для объектов?
Gero (2004-11-22 14:01:00) [1]
> Но в этом случае вопрос автора становится вообще некорректным.
Вот и я об этом. Ждем автора.
begin...end (2004-11-22 13:47:00) [2]
> [24] Gero © (22.11.04 13:39)
Возможно. Вот я тут посмотрел определение Борланда: Objectsare dynamically allocated blocks of memorywhose structure is determined by their class type. A variable of a class typeis actually a pointerthat references an object. То есть если считать SL1 и SL2 объектами, тогда прав я. Если же SL1 и SL2 считать переменными классового типа, то тогда прав ты. Но в этом случае вопрос автора становится вообще некорректным.
Anatoly Podgoretsky (2004-11-22 13:46:00) [3]AleX200411 (22.11.04 11:05) [3]
Сравнить, т.е. когда оба объекта ссылаются на один и тот же участок памятии содержат идентичный код.
Только это и if object1 <> object2 thenотвечает на вопрос, поскольку это не объекты, а именно указатели на участок памяти.
Правда попутно встречный вопрос, как можно в одну ячейку поместить два разных значения в один и тот же интервал памяти.
Gero (2004-11-22 13:39:00) [4]
> begin...end © (22.11.04 13:37)
Это только один объект, и два указателя на него.
begin...end (2004-11-22 13:37:00) [5]
> [22] Gero © (22.11.04 13:34)
Возможно, с его точки зрения они будут одинаковыми в этом случае:
var
SL1, SL2: TStringList;
begin
SL1 := TStringList.Create;
SL2 := SL1
end.
Но я не уверен, поскольку, как я уже говорил, не совсем понятна вторая часть условия: "содержат идентичный код".
Gero (2004-11-22 13:34:00) [6]
> begin...end © (22.11.04 13:33)
Приведи пример, когда два объекта будут одинаковы с точки зрения автора.
begin...end (2004-11-22 13:33:00) [7]
> [20] Gero © (22.11.04 13:30)
> С точки зрения автора вопросы, одинаковых объектов вобще
> нет.
Почему?
Gero (2004-11-22 13:30:00) [8]
> Именно с точки зрения автора вопроса.
С точки зрения автора вопросы, одинаковых объектов вобще нет.
Digitman (2004-11-22 13:30:00) [9]
> 2 синих крокодила идентичны
совершенно сзади.
но это - 2 разных крокодила !
хоть и синие они оба и летят они в разные стороны..
так что не тяни тему в "потрепаться" - авось она автору и здесь отнюдь небесполезна будет
Gero (2004-11-22 13:30:00) [10]Вы уж извините меня, ламера жалкого, но такого, чтобы объект ссылался на какой-то участок памяти, я не встречал.
begin...end (2004-11-22 13:28:00) [11]Смотрим задание автора вопроса:
> Сравнить, т.е. когда оба объекта ссылаются на один и тот
> же участок памяти и содержат идентичный код.
В примере:
> SL1:=TStringList.Create;
> SL2:=TStringList.Create;
SL1 и SL2 ссылаются на разные участки памяти. Первое условие ("ссылаются на один и тот же участок памяти") не выполняется. Второе условие ("содержат идентичный код") не совсем понятно, однако выполнение или невыполнение его уже не важно, т.к. (False and True) = (False and False) = False. Следовательно, SL1 и SL2 - разные. Именно с точки зрения автора вопроса.
WondeRu (2004-11-22 13:27:00) [12]Gero © (22.11.04 13:25) [15]
читаем:
AleX200411 (22.11.04 11:05) [3]
Сравнить, т.е. когда оба объекта ссылаются на один и тот же участок памяти и содержат идентичный код.
Gero (2004-11-22 13:25:00) [13]Для начала неплохо бы услышать определение одинаковости для двух объектов.
Судя по мнению Мастер ©, два объекта одинаковы только в том случае, если это один объект.
Мастер (2004-11-22 13:18:00) [14]TUser © (22.11.04 13:15) [11]
Может не стоит ерунду?
WondeRu (2004-11-22 13:18:00) [15]TUser © (22.11.04 13:15) [11]
2 синих крокодила идентичны, даже если они летят в разные стороны
пора уже в потрепалово!
TUser © (22.11.04 13:03) [9]
SL1:=TStringList.Create;
SL2:=TStringList.Create;
С данной точки зрения SL1 И SL2 одинаковы.
не совсем так... действительно же вы создаете два экземпляра одного класса, которые поместятся в разные участки памяти! соотвественно указатели на экземпляры классов (SL1 И SL2) не будут равны
WondeRu (2004-11-22 13:15:00) [16]TUser © (22.11.04 13:03) [9]
С данной точки зрения SL1 И SL2 одинаковы.
не согласен!
Мастер © (22.11.04 13:06) [10]
с любой точки зрения.
не согласен! эт скока выпьешь! ;)
TUser (2004-11-22 13:15:00) [17]2 синих крокодила идентичны, даже если они летят в разные стороны
Мастер (2004-11-22 13:06:00) [18]TUser © (22.11.04 13:03) [9]
С данной точки зрения
С какой с данной точки зрения?
Это разные объекты с любой точки зрения.
TUser (2004-11-22 13:03:00) [19]SL1:=TStringList.Create;
SL2:=TStringList.Create;
С данной точки зрения SL1 И SL2 одинаковы.
Мастер (2004-11-22 12:31:00) [20]TUser © (22.11.04 12:30) [7]
> А если переменные ссылаются на разные участки памяти,
> но в остальном они одинаковы?
Тогда это 2 разныхобъекта