Форум: "Начинающим";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
ВнизМетод Assign класса TPersistent Найти похожие ветки
← →
allucard (2007-04-10 14:01) [0]Доброго дня.
Подскажите плиз как метод Assign работает.
Делаю так:
Edit1.Assign(Edit2) - компилируется но при запуске выдаёт ошибку.
Как правильно его использовать.
Спасибо.
← →
Сергей М. © (2007-04-10 14:03) [1]
> как метод Assign работает.
Он работает оч просто - вызывает виртуальный метод AssignTo() "копируемого" объекта.
← →
allucard (2007-04-10 15:13) [2]А примерчик примитивный но рабочий?
← →
Сергей М. © (2007-04-10 15:16) [3]Примерчик чего ?
Ты подчеркнутое слово "виртуальный" видишь ?
Оно тебе о чем-то говорит или нет ?
← →
allucard (2007-04-10 15:38) [4]Ну виртуальный метод, virtual;
Создаётся копия метода для каждого класса.
Если не это, тогда не знаю.
← →
MBo © (2007-04-10 15:42) [5]Чего ты хочешь добиться-то этим кодом?
← →
Сергей М. © (2007-04-10 15:43) [6]
> Создаётся копия метода для каждого класса
Эт где такое написано ?!
← →
allucard (2007-04-10 15:46) [7]http://www.interface.ru/borland/d5prraz1.htm#04
← →
allucard (2007-04-10 15:47) [8]>MBo © (10.04.07 15:42) [5]
Понять как оно работает.
>Сергей М. © (10.04.07 15:43) [6]
http://www.interface.ru/borland/d5prraz1.htm#04
Статические, динамические и виртуальные методы
← →
Сергей М. © (2007-04-10 15:58) [9]
> Понять как оно работает
Как "оно" работает, тебе сказано уже в [1]
← →
allucard (2007-04-10 16:01) [10]> Сергей М. © (10.04.07 15:58) [9]
доверяй но проверяй.
лучше 1 раз увидеть чем 100 услышать.
← →
Сергей М. © (2007-04-10 16:05) [11]
> лучше 1 раз увидеть
Что ж ..
Бери лупу и смотри юнит classes.pas, если не веришь)
← →
default © (2007-04-10 16:07) [12]ради любопытства открыл справку
"
Copies the contents of another, similar object.
procedure Assign(Source: TPersistent); virtual;
Description
Call Assign to copy the properties or other attributes of one object from another. The standard form of a call to Assign is
Destination.Assign(Source);
which tells the Destination object to copy the contents of the Source object to itself.
Most objects override Assign to handle the assignment of properties from similar objects. When overriding Assign, call the inherited method if the destination object can’t handle the assignment of properties from the class of the Source parameter.
If no overridden Assign method can handle the assignment of properties from Source, the method implemented in TPersistent calls the source object’s AssignTo method. This allows the source object to handle the assignment. If the Source object is nil, TPersistent.Assign raises an EConvertError exception.
In general, the statement “Destination := Source” is not the same as the statement “Destination.Assign(Source)”. The statement “Destination := Source” makes Destination reference the same object as Source, whereas "Destination.Assign(Source)" copies the contents of the object referenced by Source into the object referenced by Destination.
Note: The types of some properties are also objects. If these properties have write methods that use Assign to set the value of the property, then in these cases the statement "Destination := Source" is the same as "Destination.Assign(Source)".
и зачем мозги компосировать?
← →
default © (2007-04-10 16:18) [13]и ещё вот это почитай
Copies the properties of an object to a destination object.
procedure AssignTo(Dest: TPersistent); virtual;
Description
Override the AssignTo method to extend the functionality of the Assign method of destination objects so that they handle newly created object classes. When defining a new object class, override the Assign method for every existing object class that should be able to copy its properties to the new class. Override the AssignTo method for every existing class to which the new class can copy.
The Assign method of TPersistent calls AssignTo if the descendant object does not succeed in copying the properties of a source object. The AssignTo method defined by TPersistent raises an EConvertError exception.
For example, given the following code in which A and B are instance variables:
A.Assign(B);
if A knows how to handle B, then it does so and returns. If A doesn’t know how to handle B’s type, execution will trickle to TPersistent.Assign, which calls:
B.AssignTo(A);
If B knows how to copy to A, the assignment succeeds. Otherwise, TPersistent raises an exception.
← →
icWasya © (2007-04-10 18:43) [14]конкретно у TEdit методы Assign и AssignTo не переопределены, а стандартная реакция - выдать ошибку.
← →
allucard (2007-04-10 20:00) [15]
> default © (10.04.07 16:07) [12]
> icWasya © (10.04.07 18:43) [14]
Спасибо.
Терь догнал.
← →
wolchonok29 (2007-04-10 20:36) [16]а не пробовали edit1.text:=edit2.text; работать точно будет
← →
default © (2007-04-10 20:40) [17]wolchonok29 (10.04.07 20:36) [16]
ему важно было понять архитектуру парочки Assign/AssignTo:)
а едит был для примера
← →
allucard (2007-04-12 08:44) [18]
> конкретно у TEdit методы Assign и AssignTo не переопределены,
> а стандартная реакция - выдать ошибку.
А какие предопределены?
← →
StriderMan © (2007-04-12 08:58) [19]
> allucard (12.04.07 08:44) [18]
TList.Assign например определен
← →
_Аноним (2007-04-12 11:22) [20]
> StriderMan ©
А с каких пор TList стал Persistent"ом ? :-)
← →
StriderMan © (2007-04-12 11:31) [21]
> _Аноним (12.04.07 11:22) [20]
> А с каких пор TList стал Persistent"ом ? :-)
гм... с моей легкой руки видимо :))) сорри.
← →
palva © (2007-04-12 16:55) [22]
> allucard (10.04.07 15:13) [2]
>
> А примерчик примитивный но рабочий?
>{$APPTYPE CONSOLE}
uses
Classes;
var
SL, SL1: TStringList;
begin
SL := TStringList.Create;
SL1 := TStringList.Create;
SL.Add("000");
SL.Add("111");
SL.Add("222");
SL1.Assign(SL);
WriteLn(SL1[1]); // 111
SL.Free;
SL1.Free;
end.
← →
allucard (2007-04-12 19:49) [23]
> palva © (12.04.07 16:55) [22]
И они будут содержать одинаковые данные после Assign, оно?
← →
default © (2007-04-12 21:54) [24]Sets the strings in the list, and possibly associated objects, from a source object.
procedure Assign(Source: TPersistent); override;
Description
Use Assign to set the value of the TStrings object from another object. If Source is of type TStrings, the list is set to the list of the source TStrings object, and if associated objects are supported, any associated objects are copied from the Source as well.
If Source is not of type TStrings, the inherited Assign will set the value of the list from any object that supports TStrings in its AssignTo method.
var
StringList: TStrings;
begin
StringList := TStringList.Create;
try
with StringList do begin
Add("This example uses A string List.");
Add("It is the easiest way to add strings");
Add("to a combobox""s list of strings.");
Add("Always remember TStrings.Create method");
Add("is abstract; So use TStringList.Create");
Add("method instead.");
end;
with ComboBox1 do begin
Width := 210;
Items.Assign(StringList);
ItemIndex := 0;
end;
finally
StringList.free;
end;
end;
всё это из справки
самый главный урок который тебе стоит вынести из этой ветки - это что в хелпе есть больше чем ты думаешь
← →
_Аноним (2007-04-12 23:13) [25]
> default ©
У меня в последнее время (несклько лет, как) складывается убеждение, что использование Ctrl+Click несколько лучше, чем использование F1.
Во первых, быстрее отрабатывает, во вторых, картину дает более полную )
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.045 c