Сравнение и создание копии объектов

Автор:dik
Дата:16.02.2005
Просмотров:3712
Скачиваний:1054
Оценка: - , Оценок - 0
Скачать (rar-файл; Размер - 2720)

Обсудить в форуме

Описание

Несколько полезных функций по работе с объеками, а именно:
СравнитьДваОбъекта
ЗаполнитьОбъект -другими словами создать копию объекта, т.к. известно если в коде сделать такую команду Объект2=Объект1, реально это будет один и тот же объект - т.к. они будут ссылаться на одну область памяти

Прикрепляю саму библиотеку и тестовый макрос

Текст примера

 /*
Примеры сравнения объектов
*/
import "diklib_class.mac";

//------------------------------------   
//------------------------------------   
Class Класс1
    var Свойство1:integer=0
       ,Свойство_Массив=TArray
       ;
    //---------------------   
    Macro Print(ИмяОбъектаДляОтчета)
        var i=0,СтрокаЭлементовМассива="";
        [ === #](ИмяОбъектаДляОтчета+" класс:"+GenClassName(this));
        [     Свойство1:      #](string(Свойство1):l);
        while (i<Свойство_Массив.size)
            СтрокаЭлементовМассива=СтрокаЭлементовМассива+string(Свойство_Массив[i])+",";
            i=i+1;
        end;
        [     Свойство_Массив:#](СтрокаЭлементовМассива);
    End;       
    //---------------------   
End;
//------------------------------------   
//------------------------------------   
Class (Класс1) Класс_НапследникКласс1
    var Свойство2:string=""
        ;
    InitКласс1;
    //---------------------   
    Macro Print(ИмяОбъектаДляОтчета)
        Print(ИмяОбъектаДляОтчета);
        [     Свойство2:      #](string(Свойство2):l);
    End;       
    //---------------------   
End;
//------------------------------------   
//------------------------------------   
Class Класс2 // подобие Класс1
    var Свойство1:integer=0
       ,Свойство_Массив=TArray
       ;
    //---------------------   
    Macro Print(ИмяОбъектаДляОтчета)
        var i=0,СтрокаЭлементовМассива="";
        [ === #](ИмяОбъектаДляОтчета+" класс:"+GenClassName(this));
        [     Свойство1:      #](string(Свойство1):l);
        while (i<Свойство_Массив.size)
            СтрокаЭлементовМассива=СтрокаЭлементовМассива+string(Свойство_Массив[i])+",";
            i=i+1;
        end;
        [     Свойство_Массив:#](СтрокаЭлементовМассива);
    End;       
    //---------------------   
End;
//------------------------------------   
//------------------------------------   

var  Объект1=Класс1
    ,Объект2=Класс1
    ,Объект3=Класс_НапследникКласс1
    ,Объект4=Класс2
    ;
    

Объект1.Свойство1=1;
Объект1.Свойство_Массив[0]=1;
Объект1.Свойство_Массив[1]=2;
Объект1.Print("Объект1");
[==================================================================================];

// равенство
Объект2.Свойство1=1;
Объект2.Свойство_Массив[0]=1;
Объект2.Свойство_Массив[1]=2;
Объект2.Print("Объект2");
[1.проверка равенства объектов: #############](СравнитьДваОбъекта(Объект2,Объект1));
[==================================================================================];
//не равенство
Объект2.Свойство1=1;
Объект2.Свойство_Массив[0]=0; //отличие
Объект2.Свойство_Массив[1]=2;
Объект2.Print("Объект2");
[2.проверка НЕ равенства объектов: #############](СравнитьДваОбъекта(Объект2,Объект1));
[==================================================================================];

// сравнение объектов разных классов
Объект3.Свойство1=1;
Объект3.Свойство_Массив[0]=1;
Объект3.Свойство_Массив[1]=2;
Объект3.Свойство2="тест";
Объект3.Print("Объект3");
//не равенство, параметр ТочноеСовпадение=True //true  - объекты должны быть точно одного класса
[3.проверка объектов разных классов (наследник). НЕ равенство объектов: #############](СравнитьДваОбъекта(Объект3,Объект1, /*по умолчанию*/true));
//равенство, параметр ТочноеСовпадение=False 
[4.проверка объектов разных классов (наследник). Равенство объектов: #############](СравнитьДваОбъекта(Объект3,Объект1, false));
[#############](СравнитьДваОбъекта(Объект3,Объект1,false));  
[==================================================================================];

Объект4.Свойство1=1;
Объект4.Свойство_Массив[0]=1;
Объект4.Свойство_Массив[1]=2;
Объект4.Print("Объект4");
//не равенство, параметр ТочноеСовпадение=False //т.к. объект4 создан на базе другого класса
[5.проверка объектов абсолютно разных классов. Равенство объектов: #############](СравнитьДваОбъекта(Объект4,Объект1, /*по умолчанию*/true));
[==================================================================================];
//------------------------------------------------
// создание копии объекта
[-------------------------------------------------];
[проверка создание копии объекта];
Объект1.Print("Объект1");
Объект2.Print("Объект2");
[сначала сравним];
[#############](СравнитьДваОбъекта(Объект2,Объект1));  
[сделаем копию];
[#############](ЗаполнитьОбъект(Объект2,Объект1));  
[снова сравним];
[#############](СравнитьДваОбъекта(Объект2,Объект1));  
Объект1.Print("Объект1");
Объект2.Print("Объект2");