Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1175593412
Megabyte
2007-04-03 13:43
2007.04.29
Задержка в bat-файле


15-1175354004
User454531
2007-03-31 19:13
2007.04.29
Чемпионат по поиску в Интернете


2-1176009000
Roman_S
2007-04-08 09:10
2007.04.29
есть Интернет? --> какой ip?


15-1175480993
Slider007
2007-04-02 06:29
2007.04.29
С днем рождения ! 2 апреля


3-1170846131
Sour Smile
2007-02-07 14:02
2007.04.29
Редактируемый TQuery





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