Пользовательские вариантыDelphi , Синтаксис , Типы и ПеременныеПользовательские вариантыСтандартный вариант может хранить только одно из значений, указанных в табл. 10.2. В версии Delphi 6 появились так называемые пользовательские варианты, которые фактически снимают ограничения на характер значений варианта. Чтобы познакомиться со свойствами новых вариантов, воспользуемся одним из них - вариантом, способным хранить комплексные числа, преобразовывать их в другие типы и осуществлять над ними нужные действия. Как мы увидим дальше, создание пользовательского варианта может быть весьма трудоемким делом - все зависит от сложности хранимых в нем данных. Мы воспользуемся вариантом, созданным разработчиками Delphi и включенным в модуль VarCmplx. Создайте такой обработчик bbRunClick: uses VarCmplx; // Эта ссылка обязательна! procedure TfmExample.bbRunClick(Sender: TObject); var VI, V2: Variants - begin // Создаем два случайных комплексных числа: VI := VarComplexCreate(Trunc(Random * 1000) / 100, Trunc(Random * 1000) / 100); V2 := VarComplexCreate(Trunc(Random * 1000) / 100, Trunc(Random * 1000) / 100); with mmOutput.Lines do begin // Пустая строка-разделитель Add(' '); Add('1-e число: '#09 + V1); Add('2-е число: '#9 + V2); Add('Сложение'#9 + (V1 + V2)); Add('Вычитание'#9 + (V1 - V2)); Add('Умножение'#09 + (VI * V2)); Add('Деление'#9#9 + (V1 / V2)) end end; Небольшой комментарий: сложная конструкция Trunc (Random*1000) /100 понадобилась только для того, чтобы реальные и мнимые части комплексных чисел содержали по три значащих цифры. Как видим, новый вариант легко справляется с поддержкой комплексных чисел: функция VarComplexCreate создает вариант, содержащий комплексное число, а дальнейшее поведение варианта -стандартное (он поддерживает математические операции и преобразование к строковому типу). Однако эта легкость обманчива: исходный текст модуля VarCmplx, который, собственно, и придал варианту дополнительные свойства (по умолчанию располагается в файле Source\Rtl\Common\VarCmplx.pas), содержит более 30000 байт.. Структура записи TVarData. Два первых байта в этой записи (поле VType) хранят признак значения варианта, остальные 14 могут использоваться для размещения данных. Создание пользовательского варианта проходит в три этапа.
В результате перечисленных шагов вы получаете полноценный вариант, обогащенный новыми свойствами: он может хранить не только те значения, которые перечислены в табл. 10.2, но и любые другие, в том числе свойства и методы! (В этом последнем случае наследником для исполняемого класса нового варианта вместо TCustomVariantType является TInvokeableVariantType или TPublishableVariantType.) Статья Пользовательские варианты раздела Синтаксис Типы и Переменные может быть полезна для разработчиков на Delphi и FreePascal. Комментарии и вопросыМатериалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Типы и Переменные ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |